Bagaimana saya bisa melihat path lengkap file saat ini?

123

Ketika saya mengedit file di Vim, apakah ada perintah untuk melihat path file saat ini? Terkadang ini sangat berguna jika ada beberapa file dengan nama yang sama dalam suatu proyek.

thameera
sumber

Jawaban:

143

Anda dapat menekan {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Menekan 1diikuti oleh Ctrl+ Gmenunjukkan path lengkap file saat ini. Jika {count}lebih tinggi dari 1, nama buffer juga akan ditampilkan.

(Hanya menekan Ctrl+ Gmenunjukkan jalur relatif ke direktori kerja Vim saat ini, seperti yang ditunjukkan oleh Jasper dalam komentar.)

Anda dapat menggunakan perintah berikut di dalam Anda .vimrcuntuk menambahkan path lengkap ke baris status, sehingga selalu terlihat:

set statusline+=%F
thameera
sumber
4
Bukankah Ctrl+Glebih seperti 'path relatif terhadap vim's cwd'?
Jasper
@Jasper tangkapan bagus! Diperbarui jawabannya.
thameera
4
Tampaknya C-gdefault untuk 0C-g, dan 2C-gmenunjukkan nomor indeks buffer (mulai dari 1) juga sebagai tambahan.
Saya sangat senang menjadi yang ke-100 untuk meningkatkan jawaban Anda! Terima kasih untuk ini 1C-g!
brankas
53

Daftar %berisi nama file saat ini.

Perintah berikut dapat dimasukkan untuk menampilkan informasi yang ditampilkan:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Jika semua yang diinginkan adalah untuk menampilkan nama file saat ini, ketik :f/ :lsatau tekan Ctrl- g(untuk path lengkap tekan 1lalu Ctrl- g).

Dalam mode sisipkan, ketik Ctrl- rlalu %untuk memasukkan nama file saat ini.

Perintah berikut menyisipkan baris yang terdiri dari path lengkap file saat ini dan alternatif ke buffer:

:put =expand('%:p')
:put =expand('#:p')

Sumber: Dapatkan nama file saat ini di vim wikia

Terkait:

kenorb
sumber
2
Mungkin perlu dicatat bahwa Anda juga dapat menggunakan =expand...ekspresi itu setelah Ctrl-Rketika dalam mode sisipkan juga.
dash-tom-bang
22

Anda dapat menggunakan :!ls %:puntuk mendapatkan path lengkap ke file saat ini.

Bergantung pada konteks ex, %akan berarti isi file atau nama file. Ketika keluar, itu mewakili jalur file relatif ke direktori saat ini. Perintah ' %:p' akan menambahkan pengubah nama file path lengkap %.

Ada beberapa pengubah nama file lain yang menarik seperti:

  • :~: Dapatkan jalur file relatif ke direktori home (yang ini tidak berfungsi untuk saya karena suatu alasan)
  • :.: Dapatkan jalur file relatif ke direktori saat ini ( %default)
  • :r: Nama file root. Nama file tanpa ekstensi.
  • :e: Ekstensi file.
  • :h: Membagi /dan mengembalikan setengah kiri (yaitu jika saya mengedit file di jalur /tmp/test.txtdan jalankan %:p:hakan kembali/tmp
  • :t: Membagi /dan mengembalikan setengah kanan (yaitu jika saya mengedit file di jalur /tmp/test.txtdan jalankan %:p:takan kembalitext.txt
CharlesL
sumber
Saya pikir maksud Anda%: p: t akan mengembalikan text.txt
John O'M.
@ JohnO'M. ya, benar terima kasih: D. Tetap.
CharlesL
7

Orang dapat melihat direktori kerja saat ini dengan :pwd. Tentu saja, ini hanya direktori, dan bukan nama file. Untuk mendapatkan direktori dan nama file yang berfungsi, kita dapat menggunakan register khusus %, yang berisi informasi tentang file saat ini.

Jika Anda menggunakan :echo @%, Anda akan mendapatkan direktori dan nama file dari file saat ini.
Jika Anda menggunakan :echo expand('%:p'), Anda akan mendapatkan path lengkap dan nama file dari file saat ini. Ini sangat mirip dengan jawaban CharlesL .

Saya ingat yang ini, karena, jika Anda menggunakan bantuan vim :h expand, maka itu menyebutkan itu %dan %:pkerabat mereka.

davidlowryduda
sumber
4

Saya menggunakan:

:f[ile]

Itu :fatau :file.

Saya terkejut tidak ada yang menyebutkan ini dalam jawaban, apakah saya melewatkan sesuatu?

Cédric Van Rompay
sumber
Sederhana dan bermanfaat
Morteza Ziyae
3

Untuk menampilkan path lengkap untuk semua file, termasuk symlink yang diselesaikan, gunakan yang berikut ini.

:echo resolve(expand('%:p'))
joelostblom
sumber
3

Ada aleady jawaban yang lebih baik, tetapi jika (karena alasan tertentu) Anda ingin menggunakan shell untuk mendapatkan path lengkap file (ini lebih berguna jika Anda akan melakukan beberapa operasi lain pada file dengan shell), pada sistem seperti Unix Anda dapat menjalankan:

:!realpath %

atau:

:'<,'>!realpath %

untuk memasukkan jalur ke dalam dokumen pada pilihan saat ini.

Daftar %selalu berisi nama file. Contoh dunia nyata mungkin jika Anda mengedit file konfigurasi, tetapi tidak memiliki izin menulis (dan tidak ingin menjalankan Vim sebagai root), Anda dapat mengedit file, lalu jalankan:

:w ! sudo tee %

untuk menyimpan file (sedikit offtopic di sana, tetapi ini adalah contoh yang baik dari apa lagi yang bisa dilakukan dengan %register).

Sam Whited
sumber
realpathbukan POSIX, jadi mungkin lebih mudah untuk dilakukan:!echo "$PWD/%"
muru
Sepakat; panggilan yang bagus.
Sam Whited
2

Anda perlu mengatur garis status agar dapat dilihat dan juga mengaturnya ke jalur. Saya melakukannya secara permanen dengan menambahkan dua baris di bawah ini ke ~ / .vimrc saya

set laststatus=2
set statusline+=%F

Jika Anda ingin menjalankannya sekali saja. Kemudian ketika melihat jenis dokumen

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>
pengguna34612
sumber
1
Ini adalah jawaban yang sama dengan yang dibuat oleh thameera pada pertanyaan yang sama.
statox
1

Anda dapat menunjukkan path lengkap file yang sedang diedit di bilah judul, yang merupakan cara mudah untuk menunjukkan path file menurut saya.

Untuk melakukan itu, Anda perlu mengatur titleopsi dan titlestring. Saat ini saya menggunakan pengaturan berikut:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Ini akan menampilkan nama host dari Vim, kemudian path lengkap file dan diikuti oleh waktu modifikasi terakhir dari file tersebut. Lihat gambar di bawah untuk demo

masukkan deskripsi gambar di sini

jdhao
sumber