Cara meneruskan nama file saat ini dengan jalur berbeda ke baris perintah


8

Apakah ada cara untuk membuat simbol khusus %berfungsi dengan nama jalur pada baris perintah? Sebagai contoh, saya ingin melakukan:

:diffsplit Path\to\other\directory\%

Sehingga saya bisa melakukan @:dengan cepat membandingkan file dengan nama yang sama. Namun, ini hanya membuka buffer baru yang disebut %.

Tentu saja saya bisa melakukannya:

:exe 'diffsplit Path\to\other\directory\'.expand('%')

Tapi ini rumit karena saya tidak bisa tab direktori lengkap saat mengetik perintah.

Apakah ada cara lain yang lebih baik untuk melakukan ini?

Ini pertanyaan terkait , tetapi tidak menjawab situasi saya dengan tepat.

Sunting: Hanya untuk memperjelas, saya ingin dapat menggunakan kembali perintah secara tepat untuk file yang berbeda. Jadi solusi yang cukup mengisi file saat ini di baris perintah tidak akan berfungsi. Perintah yang sama harus bekerja untuk nama file yang berbeda .


Anda dapat menggunakan cmap untuk% sehingga diperluas ke nama file, yang mungkin membantu: D
SibiCoder

Ini memiliki masalah yang sama dengan solusi Kent. Segera setelah Anda menekan %, itu akan mengisi nama file, tetapi kemudian ketika saya ingin menggunakan kembali baris itu, nama file lama akan tetap ada. Saya ingin% memasukkan secara dinamis nama file saat ini, apa pun yang terjadi pada saat itu tanpa harus mengetik ulang.
Tumbler41

2
:diffsplit Path/to/other/directory/%:t
Sato Katsura

Wow, saya pikir saya sudah mencobanya, tetapi Anda benar, itu berhasil! Terima kasih! Jika Anda ingin memasukkannya dalam jawaban saya akan menerimanya.
Tumbler41

Jawaban:


10

Karakter khusus (lihat :h cmdline-special) dan pengubah nama file (lihat :h filename-modifiers) diperluas pada baris perintah, jadi:

:diffsplit Path/to/other/directory/%:t

1

Jadi ternyata itu masalah Windows yang bodoh. Obat untuk ini adalah dengan hanya menggunakan garis miring ke depan dalam nama path. yaitu :diffsplit Path/to/other/directory/%bekerja dengan baik.

Saya telah memperbaiki ini di sistem saya dengan menggunakan opsi set shellslashyang secara default menggunakan forward slash bahkan pada Windows.


Ya, backslash digunakan untuk menghindari makna khusus %, dan merupakan pemisah jalur default pada Windows. Vim tidak tahu mana yang ada dalam pikiranmu.
Ingo Karkat

Lihat, saya memikirkan itu. Jadi saya pikir saya hanya bisa melakukan directory\\%tetapi itu masih tidak berhasil. IDK, tapi saya kira itu tidak masalah karena garis miring memecahkan masalah.
Tumbler41

0

Saya tidak tahu apakah ini baik untuk Anda:

:diffsplit Path/to/somewhere/<c-r>%

Hanya satu lagi penekanan tombol ke sumber asli Anda, <C-r>untuk mengisi nilai %register.


Ini masih tidak memungkinkan untuk menggunakan @:untuk file masa depan karena "kode keras" nama file saat ini.
Tumbler41

kemudian bungkus perintah kustom seperti :Mydiff /path/to/there/agar path bisa diselesaikan tab. kirimkan saja ini ke perintah / fungsi Anda denganexec
Kent
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.