Pintasan untuk membuka file di Vim

123

Saya ingin membuka file di Vim seperti di Eclipse menggunakan Ctrl+ Shift+ R, atau melalui opsi Ctrl+ Nautofill. Panggil pintasan keyboard, ketik nama / pola file, dan pilih dari semua nama file yang cocok.

Saya tahu membukanya secara normal seperti:

:tabe <filepath>
:new <filepath>
:edit <filepath>

Masalahnya di sini adalah saya harus menentukan seluruh jalur file dalam kasus ini.

Techmaddy
sumber
1
Perhatikan bahwa perintah yang disarankan memiliki efek berbeda :tabeakan membuka file di tab baru, :newakan membagi jendela secara horizontal, dan :editakan menutup file saat ini sebelum membuka yang baru.
Skippy le Grand Gourou

Jawaban:

61

Baru-baru ini saya jatuh cinta dengan fuzzyfinder.vim ... :-)

: FuzzyFinderFile akan memungkinkan Anda membuka file dengan mengetikkan nama atau pola parsial.

f3lix
sumber
141

Yang biasanya saya lakukan adalah e .(e-space-dot) yang memberi saya direktori saat ini yang dapat dijelajahi - kemudian saya bisa /- mencari fragmen nama, seperti menemukan kata dalam file teks. Saya menemukan bahwa secara umum cukup baik, sederhana dan cepat.

dkretz.dll
sumber
22
Anda tidak membutuhkan ruang, menghemat 25% pengetikan tambahan. ( :e.).
Konrad Rudolph
67
Tidak perlu titik jika menggunakan huruf besar e, misal: E <ENTER>
Andriy Drozdyuk
2
@drozzy Ini terjadi dengan vim :-)
DerMike
7
Ada perbedaan dalam perilaku antara :e.dan :Emeskipun: jika file saat ini telah diedit dan belum disimpan, yang pertama akan mengeluh (seperti :edit) karena "tidak ada penulisan sejak perubahan terakhir", sedangkan yang terakhir akan membagi jendela secara horizontal (seperti :new) untuk memungkinkan pembukaan file baru (sementara keduanya akan mengganti file saat ini dengan file baru jika belum diubah (seperti :edit)).
Skippy le Grand Gourou
1
Jika Anda membuka file, lalu menggantinya dengan file kedua, Anda dapat kembali ke file pertama menggunakan "e #"
dkretz
33

:find adalah pilihan lain.

Saya membuka vim dari root proyek saya dan pathmengaturnya ke sana.

Kemudian, saya dapat membuka file yang terletak di mana saja di pohon menggunakan:

:find **/filena< tab >

Tab akan otomatis selesai melalui berbagai kecocokan. ( **memberitahu itu untuk mencari secara rekursif melalui jalur).

mattwarren
sumber
Saya tidak menemukan berguna :findkarena untuk mendapatkan jalur relatif ke direktori kerja. Lihat pertanyaan dan @romainl jawabannya di sini: stackoverflow.com/questions/28224168/… . Saya menemukan jawaban @strager yang lebih menarik untuk mendapatkan jalur relatif ke direktori kerja lebih mudah.
ziiweb
25

Anda dapat mencari file di jalur saat ini dengan menggunakan **:

:tabe **/header.h

Tekan tab untuk melihat berbagai penyelesaian jika ada lebih dari satu kecocokan.

strager
sumber
Saya mencoba menggunakan ini tetapi ini sangat lambat. Maksud saya aplikasi saya besar dan editor berhenti bekerja untuk beberapa saat. Apakah Anda mengetahui pengaturan apa pun untuk meningkatkan kinerja dan kecepatan editor.
Techmaddy
1
Jawaban bagus. Gunakan sesuatu seperti :tabe **/*der.hjika Anda tidak ingat nama lengkap file tersebut.
ziiweb
16

Pertimbangkan untuk menggunakan CtrlP plugin .

Itu termasuk dalam Janus Distributive .

Memungkinkan Anda menemukan file di direktori saat ini, buffer terbuka, atau file yang terakhir digunakan menggunakan "pencocokan fuzzy" atau ekspresi reguler.

Alexey
sumber
1
sebenarnya saya menggunakannya sebagai bagian dari distribusi Janus.
Alexey
Repo CtrlP asli tidak aktif, tetapi ada garpu aktif
jpyams
12

kecuali saya melewatkan sesuatu,: e nama file adalah cara tercepat yang saya temukan.

Anda juga dapat menggunakan tab untuk melengkapi nama file secara otomatis.

Ian P
sumber
@dirkgently, Ini. Ini masih merupakan jalan pintas, seperti yang disarankan oleh judul pertanyaan ini, tetapi menurut saya bukan itu yang dicari oleh penanya.
strager
Bagi saya, pelengkapan otomatis tab tidak berfungsi untuk: e. Selain itu, Anda tidak selalu ingin mencari nama file yang dimulai dengan sesuatu, melainkan untuk kata tengah dalam nama file.
Andriy Drozdyuk
9

Saya menggunakan beberapa pintasan di file .vimrc saya (sintaks persis di bawah).

Mereka didasarkan pada fakta bahwa dalam 90% kasus, saya ingin membuka file lain di direktori yang sama dengan file yang sedang saya edit, atau dalam direktori yang sangat dekat dalam hierarki dengan file yang diedit.

Inilah yang dilakukan perintah:

,cd : Ubah direktori kerja saat ini ke direktori tempat file saat ini yang sedang Anda edit.

,e: Membuka file dengan direktori kerja saat ini sudah diisi sehingga Anda harus menentukan hanya nama file.

Masukkan ini ke .vimrc Anda:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Berikut urutan kejadiannya:


  1. Anda sedang mengedit file bernama test.java di "/ home / prog"
  2. ,cd -> Direktori kerja saat ini sekarang menjadi "/ home / prog"
  3. ,e -> Perluas ke ": e / home / prog" sehingga Anda bisa mengisi nama file, katakan test.h.

  1. ,e -> Memperluas ke ": e / home"
  2. tab -> Pilih subdirektori / home
  3. enter-> cdke direktori yang ingin Anda katakan / home / prog
  4. ,e -> Memperluas ke ": e / home / prog"
Himadri Choudhury
sumber
8

Ada juga perintah-t yang menurut saya adalah yang terbaik dari kelompok itu (dan saya sudah mencoba semuanya). Ini adalah kerumitan kecil untuk menginstalnya tetapi, setelah terinstal, itu adalah mimpi untuk digunakan.

https://wincent.com/products/command-t/

bronson
sumber
1
Anda mungkin ingin mencoba ctrlp.vim ( github.com/kien/ctrlp.vim ) juga. Ini pada dasarnya sama dengan Command-T tetapi ditulis dalam Vimscript murni. (IMHO lebih mudah digunakan juga)
tipe
6

Gunakan tab, mereka bekerja saat memasukkan path file dalam mode escape vim!

dirkgently
sumber
4

Jika Anda memiliki tag (dan seharusnya), Anda dapat membuka file dari baris perintah hanya dengan nama kelas atau metode atau fungsi c, dengan "vim -t DBPlaylist", dan dalam vim dengan ": tag ShowList ".

Paul Tomblin
sumber
4

Jika Anda sedang mengedit file di direktori umum, Anda bisa :cdke direktori itu, lalu gunakan:e hanya pada nama file.

Misalnya, daripada:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Anda dapat melakukan:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Atau, jika Anda sudah membuka file di direktori yang diinginkan, Anda dapat menggunakan %singkatan untuk nama file saat ini, dan memangkasnya ke direktori saat ini dengan :hmodifier ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

Dan, seperti yang dikatakan orang lain, Anda dapat melengkapi nama file di ex-line (lihat :help cmdline-completionlebih lanjut).

rampion
sumber
4

Ini tidak tepat apa yang Anda cari, tetapi baik itu dalam banyak kasus (meskipun tidak semua).

Jika Anda membuka VIM dan ada nama file di buffer, Anda dapat meletakkan kursor di nama dan jenis file tersebut gf. Ini membuka file yang namanya berada di bawah kursor di buffer yang sama. Itu sama dengan

:e CTRL+r CTRL+w

Nathan Fellman
sumber
1
Saya menekan gf dan sekarang saya telah membuka file baru yang ada di bawah curssor. Sekarang bagaimana untuk kembali ke file aslinya. !!
vrbilgi
@ user430294: Ini terbuka di buffer yang berbeda. Gunakan:b oldname
Nathan Fellman
@vrbilgi, gunakan Ctrl + o untuk kembali ke file yang diedit sebelumnya. Gunakan Ctrl + i untuk maju lagi ke file tempat Anda kembali.
Беров
3

Saya tahu tiga plugin yang mengizinkan untuk membuka file, mendukung pelengkapan otomatis, dan tidak perlu memasukkan nama jalur lengkap file untuk dibuka (selama file berada di bawah salah satu direktori dari &pathopsi vim) :

Akhir-akhir ini, saya telah melihat plugin lain dengan fitur serupa, tetapi saya tidak ingat namanya.

Segera,: find kemungkinan mendukung pelengkapan otomatis - tambalan tentang topik ini sedang beredar di milis vim_dev akhir-akhir ini.

Luc Hermitte
sumber
1
  • Anda dapat menggunakan (set wildmenu)
  • Anda dapat menggunakan tab untuk melengkapi nama file secara otomatis
  • Anda juga dapat menggunakan pencocokan, misalnya: e p*.datatau sesuatu seperti itu (seperti di 'dos' lama)
  • Anda juga bisa: menelusuri konfirmasi e (untuk jendela grafis)

  • tetapi Anda mungkin juga harus menentukan versi vim yang Anda gunakan, dan cara kerja emacs itu. Mungkin kami dapat menemukan alternatif vim yang tepat untuk Anda.

Benteng
sumber
1

FuzzyFinder telah disebutkan, namun saya menyukai perilaku seperti teman teks dari FuzzyFinderTextmate plugin yang memperluas perilaku untuk menyertakan semua subdirektori.

Pastikan Anda menggunakan fuzzyfinder.vim versi 2.16 - Versi yang lebih tinggi merusak plugin.

Naseer
sumber
1

Dengan Exuberant ctags, Anda dapat membuat file tag dengan informasi file:

ctags --extra=+f -R *

Kemudian, buka file dari VIM dengan

:tag filename

Anda juga dapat menggunakan <tab>untuk melengkapi nama file secara otomatis.

Wonil
sumber
1

Di GVIM, File dapat diakses menggunakan dialog buka / baca / tulis;

:browse {command}

{perintah} - buka / baca / tulis

open - Membuka file yang dibaca - Menambahkan file menulis - dialog SaveAs

Samantha
sumber
0

Saya telah menginstal FuzzyFinder. Namun, batasannya adalah ia hanya menemukan file di direktori saat ini. Salah satu solusi untuk itu adalah dengan menambahkan FuzzyFinderTextmate. Namun, berdasarkan dokumen dan komentar, itu tidak berfungsi dengan baik. Anda memerlukan versi FuzzyFinder yang tepat dan Anda memerlukan salinan Vim Anda untuk dikompilasi dengan dukungan Ruby.

Solusi lain yang saya coba sekarang adalah membuka semua file yang mungkin saya perlukan di awal sesi pengeditan. Misalnya, buka semua file di direktori kunci ...

:args app/**
:args config/**
:args test/**
etc...

(Ini berarti saya mungkin akan membuka banyak file, namun sejauh ini tampaknya masih berfungsi dengan baik.)

Setelah itu, saya bisa menggunakan FuzzyFinder dalam mode buffer dan itu akan bertindak seperti command-opintasan TextMate ...

:FuzzyFinderBuffer
Ethan
sumber
Kamu yakin? Saya memiliki beberapa konfigurasi di .vimrc saya, cari "g: fuf_abbrevMap". Saya pasti menemukan contoh di dokumentasi. Saat saya mengetik pintasan, saya kemudian mengetikkan singkatan seperti "web:" dan itu akan mencari semua file dalam folder pilihan saya. Masalah saya sebenarnya adalah untuk beberapa alasan file tidak terbuka lagi, saya melihat [NEW DIRECTORY] di status bar. Tapi saya memiliki masalah yang sama dengan: o, sepertinya tidak terkait dengan fuf.