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 .

Tumbler41
sumber
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
Sato Katsura
sumber
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.

Tumbler41
sumber
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.

Kent
sumber
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