Bagaimana saya bisa memperluas jalur lengkap dari file saat ini untuk meneruskan ke perintah di Vim?


Jawaban:


161

:!mycommand %:p

Terkait:

:!cd %:p:h


23
Bagaimana Anda menemukan ini di bantuan VIM?
keflavich

57
@keflavi:help filename-modifiers
Annika

untuk mendapatkan direktori yang berisi file saat ini, saya rasa%: h sudah cukup. Mengapa perlu%: p: h di sini?
HVNSweeting

1
@HVNSweeting :%padalah jalur absolut ke file, bukan jalur relatif. :%p%hadalah jalur absolut ke direktori induk file. Menggunakan just %:hdapat menghasilkan jalur relatif.
Annika Backstrom

2
@HVNSweeting Shell:, cd ~ ; vim .vimrcVim :, :!echo %:hharus menampilkan '.' untuk jalur relatif.
Annika Backstrom

65

Dua jawaban lainnya tidak berhasil untuk saya (untuk beberapa alasan). Namun, saya menemukan bahwa kombo ini menampilkan jalur lengkap ketika diketik dalam mode Normal:

Tekan 1laluCtrlG

Sumber: " Dapatkan nama file saat ini " di Wiki Tips Vim. Lihat juga {count}CTRL-Gbagian :help CTRL-G.


5
Itu topik yang berbeda. Pertanyaannya adalah tentang memasukkan jalur buffer dalam string perintah (dengan demikian memimpin :!). {count}CTRL-GUrutan Anda adalah untuk menampilkan jalur lengkap di UI.
Stefan Majewsky

3
@StefanMajewsky mengenai judul pertanyaan yang ternyata membawa saya ke sini, seharusnya ini adalah jawaban yang dipilih.
doc_id

29

Tambahkan :p, misalnya

:!mycommand %:p

Dan %:p:hakan memberi Anda jalur direktori tempat file tersebut berada.


9

Untuk mencetak nama file vim saat ini:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

Misalnya (dengan fungsi vim), untuk resolve()dan expand()setiap symlink ke jalan mutlak untuk naskah saat ini <sfile>:p(bukan %:p), dan kemudian execke sourcedalam fnameescapenama file -ed terkandung dalam variabel vim fungsi-lokal l:vimrcfilename:

 "  g:__sfile__dirname     -- directory containing this vimrc script
 "                            after symlinks
 "                            ~dirname(abspath(realpath(__file__)))
 let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")

 "  Source_dotvim(filename)  -- source dirname(this_vimrc)/filename
 function Source_dotvim(filename)
     let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
     if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
         "source s:vimrcfilename "this doesn't work, so exec:
         exec "source " . fnameescape(l:vimrcfilename)
     else
         echo l:vimrcfilename . " empty or not found."
     endif
 endfunction 

 call Source_dotvim("vimrc.local.01-env.vimrc")

Catatan:

Referensi



0

Jika Anda ingin menggunakan jalur lengkap di Anda vimrc, Anda dapat menggunakan sesuatu seperti ini:

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

Ini akan memberi Anda jalur dengan garis miring terbalik di Windows.

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.