Dengan asumsi buffer saat ini adalah file yang terbuka untuk diedit, jadi :e
tidak ditampilkan E32: No file name
.
Saya ingin menarik salah satu atau semua:
- Nama file persis seperti yang ditunjukkan pada baris status, mis
~\myfile.txt
- Path lengkap ke file, misalnya
c:\foo\bar\myfile.txt
- Hanya nama file, mis
myfile.txt
Jawaban:
TL; DR
:let @" = expand("%")
>ini akan menyalin nama file ke register yang tidak dikenal , lalu Anda bisa menggunakan yang lama
p
untuk menempelkannya. dan tentu saja Anda dapat memetakan ini ke tombol untuk penggunaan yang lebih cepat.:nmap cp :let @" = expand("%")<cr>
Anda juga dapat menggunakan ini untuk path lengkap
:let @" = expand("%:p")
Penjelasan
Vim menggunakan register tanpa nama untuk menyimpan teks yang telah dihapus atau disalin (disentak), juga ketika Anda menempelkannya membaca teks dari register ini.
Menggunakan
let
kita dapat secara manual menyimpan teks dalam register menggunakan:let @" = "text"
tetapi kita juga dapat menyimpan hasil ekspresi.Dalam contoh di atas kami menggunakan fungsi
expand
yang memperluas wildcard dan kata kunci. dalam contoh kita, kita gunakanexpand('%')
untuk memperluas nama file saat ini. Kita dapat memodifikasinya sebagaiexpand('%:p')
untuk nama file lengkap.Lihat
:help let
:help expand
:help registers
detailnyasumber
unnamedplus
clipboard Anda gunakanlet @+ = expand("%")
"%:h"
untuk mendapatkan path lengkap tanpa nama file.Hampir apa yang Anda minta, dan itu bisa dilakukan:
Ctrl+R %
menarik nama file saat ini ke tempat Anda berada (command prompt, edit buffer, ...). Lihat Tip Vim ini untuk lebih lanjut.sumber
Ctrl+R %
berfungsi saat dalaminsert
mode - tetapi dalamedit
mode,Ctrl+R
berarti mengulang.Jika Anda ingin meletakkan nama file buffer saat ini di clipboard tingkat sistem Anda, coba ubah register ke @ +:
Sunting 20140421: Saya biasanya menggunakan ini, jadi saya membuat beberapa cara pintas. Linux Vims tampaknya beroperasi sedikit berbeda dari Mac Vims , jadi ada kasus khusus untuk itu juga. Jika Anda memasukkan yang berikut ini di
~/.vimrc
:Maka misalnya
<leader>cf
akan menyalin path relatif dari buffer saat ini (pemimpin default adalah backslash (\
)). Saya sering menggunakan ini untuk menjalankan perintah pada file atau melakukan hal-hal lain pada baris perintah. Saya tidak terlalu sering menggunakan nama file / nama direktori.Anda dapat mempertimbangkan pemetaan yang lebih intuitif seperti
<leader>cfr
untuk relatif,<leader>cfa
untuk absolut,<leader>cff
hanya nama file,<leader>cfd
untuk direktori.sumber
"*
dan"+
setara, sehingga Anda dapat membuang platform check dan gunakan saja@+
Jika Anda melakukannya,
:reg
Anda akan melihat nama file saat ini di%
register. Anda dapat menempelkannya dengan"%p
, misalnya.Jika, seperti saya, Anda sering beralih ke buffer 'alternatif', sangat berguna bahwa path-dan-file-nama lengkapnya dimasukkan ke dalam
#
register. Anda dapat menempelkannya dengan"#p
, misalnya.Catatan (kalau-kalau ini adalah perilaku khusus untuk pengaturan saya): Saya menggunakan VIM 7.4.52 di Ubuntu 14.04.4 LTS.
sumber
Menggabungkan informasi dari beberapa jawaban lain: Jika Anda ingin menarik path lengkap saat ini ke file dan memasukkannya ke dalam buffer perintah di jendela lain, pertama lakukan
:let @" = expand("%:p")
, kemudian pindah ke jendela lain dan ketikCtrl+R "
.Berguna untuk menyalin file sambil tetap berada di direktori yang sama dan menjaga yang lama terbuka. Sebagai contoh:
sumber
Ini solusinya:
sumber
Saya menggunakan xclip untuk mengakses clipboard X, jadi saya menggunakan:
sumber