Riwayat file terbaru di Vim?

132

Saya ingin mengakses file terbaru yang telah saya buka dan kemudian ditutup di GVim. Saya sering membuka dan menutup GVim. Saya juga ingin mengakses file terbaru dari sesi sebelumnya.

Apakah GVim menyimpan file terbaru di suatu tempat seperti Word dan banyak aplikasi desktop lainnya menyimpan? Bagaimana cara mengaksesnya?

Mert Nuhoglu
sumber
Mirip dengan pertanyaan: stackoverflow.com/questions/309723/…
malgca

Jawaban:

229

Setidaknya terminal vim menyimpan sepuluh file sebelumnya ke ~/.viminfodalam bagian filemarks. Anda dapat menggunakan '0, '1, '2, ... '9untuk melompat di antara mereka.

(Mungkin hanya berguna untuk '0kembali ke file terakhir yang Anda edit, kecuali ingatan Anda lebih kuat dari saya.)

Anda juga dapat menggunakan :browse oldfilesperintah untuk mendapatkan menu dengan angka.

sarnold
sumber
2
Jika Anda ingin menggunakan 0- 9sebagai tanda untuk navigasi, jangan menandainya secara manual
yuan
16
gunakan :browse oldget file-list. dan masukkan quntuk memilih file mana yang akan diedit.
songhir
5
:e #<1membuka file terakhir, lihat :h c_#<.
Hotschke
: bro ol works .. tetapi Anda harus mengetik banyak tombol .. pertama untuk mendapatkan daftar file, lalu untuk menekan q, dan kemudian untuk memilih nomor. Saya percaya plugin MRU yang disebutkan di bawah ini jauh lebih baik: stackoverflow.com/a/3171323/4752883 Anda harus menekan <leader> f, lalu browse ke file dengan hjkl atau kunci lain / cari nama file. Kemudian tekan o, masukkan, t, atau v untuk membuka file dengan cepat di bawah kursor.
alpha_989
Saya memulihkan file yang saya hapus secara keliru menggunakan rmmetode yang disebutkan di atas.
tandem
55

Cara terbaik yang saya gunakan adalah

:browse oldfiles

Cara termudah di vim.

andor kesselman
sumber
1
Bagus! Saya memetakan ekspresi itu sebagai "nmap bo: browse oldfiles <CR>" (tanpa kutipan) di my ~ / .vimrc. Cukup mengetik pemetaan itu (bo) dalam mode Normal menjalankan perintah itu
Victoria Stuart
22

Jawaban sangat terlambat di sini ... dijelaskan pada jawaban @sarnolds - Anda dapat melihat riwayat file dengan perintah oldfiles @lihat: h oldfiles atau: h viminfo

:oldfiles 

Selain itu, Anda dapat memiliki manajemen file berbutir halus dengan tampilan dan sesi ... @lihat: h mkview dan: h sesi untuk spesifik ...

Eddie B
sumber
4
Ini berguna untuk mengetahui bagaimana sebenarnya membuka file setelah Anda tahu nomornya dari daftar :oldfiles. Seseorang dapat melakukan ini secara interaktif menggunakan :browseperintah, seperti yang dijelaskan oleh @sarnold tetapi juga dimungkinkan untuk melakukan ini secara manual dengan menggunakan :e #<NN di mana terdapat nomor dari oldfilesdaftar.
Krzysztof Adamski
11

Ada pisau Swiss file switching plugin CtrlP , yang juga merupakan bagian dari janus distributive. Memiliki:CtrlPMRU perintah dengan pencarian cerdas di antara file yang baru digunakan.

Catatan: CtrlP memelihara daftar sendiri dari file yang paling baru digunakan di g:ctrlp_cache_dir."mru/cache.txt". Itu tidak menggunakan kembali viminfo ( set viminfo?) yang berisi daftar tanda file. Ini berguna jika Anda ingin menghapus daftar ini.

Alexey
sumber
1
Antarmuka CtrlP tidak intuitif untuk pengguna vim? Tidak sepadan dengan kesulitan mempelajari antarmuka yang rumit untuk melakukan hal sederhana seperti menemukan file MRU = ~ / regexp / (mudah dilakukan dengan perl / grep regexp ~ / _viminfo).
mosh
Ya .. Saya telah mencoba memahami cara menggunakan Ctrlp, tetapi MRU tampaknya jauh lebih mudah digunakan, jika Anda memiliki satu set file sederhana ( stackoverflow.com/a/3171323/4752883 ). Di MRU Anda juga dapat melakukan pencarian VIM regexp untuk menemukan file yang Anda butuhkan ...
alpha_989
9

Gunakan :bro olkemudian tekan nomor yang sesuai dengan file yang ingin Anda buka.

nenchev
sumber
5

The CtrlP Plugin memungkinkan Anda mencari melalui file Anda baru-baru ini digunakan serta file dalam direktori saat ini dengan perintah ini:

nnoremap <c-p> :CtrlPMixed<cr>

Ini menyelamatkan Anda dari kerumitan karena harus berurusan dengan perintah Vim dan plugin MRU bawaan, yang keduanya tidak memungkinkan Anda melakukan pencarian file fuzzy, yang sangat penting ketika bekerja pada proyek yang lebih besar.

Andy Ray
sumber
Bagi mereka yang tahan memetakan kembali standar Ctrl-P secara fungsional: Anda bisa membuka Ctrl-P secara normal dan menggunakan Ctrl-F atau Ctrl-B untuk beralih antar mode (MRU menjadi salah satunya)
Gustavo Matias
2

Seperti yang terlihat di komentar di sini (http://stackoverflow.com/questions/571955/undo-close-tab-in-vim), file Anda mungkin masih terbuka di buffer:

:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number

Misalnya, Anda dapat membuka kembali buffer ketiga di tab baru (gunakan: e sebagai gantinya jika Anda tidak menggunakan tab):

:tabnew +3buf
pengguna886333
sumber
1
Ya, ini berhasil. Tapi tentunya tugas editor adalah untuk mempermudah? Jika Anda harus mengeluarkan perintah, identifikasi sesuatu secara visual, ingat ID, lalu keluarkan perintah lain yang benar-benar membuang waktu pengguna. Jawaban Anda benar, dan saya tidak bermaksud menyinggung, tetapi itu tidak cocok untuk salah satu fitur pembunuh Vim!
artfulrobot
Saya memiliki masalah yang sama. Sudahkah Anda mencoba buffexplorer? Ini menggabungkan ls dan: tabnew + Nbuf. Sekarang Anda dapat membuka daftar buffer, dan membukanya di tab baru dll. Dengan satu keystroke (o, t, v) etcc.
alpha_989
2

Anda mungkin dapat mengakses daftar dari baris perintah dengan:

grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'"$HOME"','

Penjelasan:

grep '^>' ~/.viminfo  #find the list of recent files
cut -c3-              #remove the first 2 characters
sed 's,~,'"$HOME"','  #replace ~ with absolute path

Anda dapat memiliki alias bash jika Anda menggunakannya secara teratur

alias vim_mru="grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'\"$HOME\"','"
Alexx Roche
sumber
2

Menambahkan 2 sen saya di sini karena fzf tidak disebutkan sebelumnya, yang merupakan alat yang luar biasa:
fzf.vim memiliki :Historyperintah yang memungkinkan Anda mencari file yang paling baru digunakan dalam fuzzy dan mencari saat Anda mengetik .
Saya menyesuaikan perilaku (default) dari perintah ini dengan tidak membiarkan fzf menyusun ulang daftar hasil pencarian yang paling cocok: Saya ingin urutan semua nama file yang cocok tetap menjadi urutan di mana file-file ini terakhir kali digunakan.
Untuk menyelesaikan penyesuaian ini, saya menambahkan yang berikut ini di .vimrc saya untuk mengesampingkan Historyperintah default yang ditentukan oleh plugin fzf.vim:

    command! -bang -nargs=* History
      \ call fzf#vim#history({'options': '--no-sort'})
Emile Vrijdags
sumber
1

Satu lagi plugin yang memungkinkan Anda memilih file dari daftar yang terakhir dimodifikasi adalah staritfy . Ini menggantikan layar mulai Anda dengan daftar file yang paling baru dimodifikasi. Anda selalu dapat membuka halaman ini nanti menggunakan :Startifyperintah.

Krzysztof Adamski
sumber
1
Bahkan tidak dapat memulai untuk menginstal - perlu lebih banyak dokumen tentang pemasangan dan penggunaan dasar. Menggunakan MRU, karena mudah dipasang dan digunakan.
mosh
1

:ls untuk membuat daftar file terbaru dengan nomor buffer di kolom sebelah kiri.

Kemudian lakukan :b{buffer-number}untuk melompat ke sana.

Contoh: :lsmenunjukkan daftar file. Saya ingin melompat ke file ketiga terakhir yang saya kunjungi. :b3akan membawaku ke sana.

Untuk pencarian yang lebih cepat, petakan :lssesuatu, misalnya <Leader>.dalam file .vimrc Anda.

Bryan Perez
sumber
1

Anda juga dapat kembali dengan ctrl+ O.

IvanDi
sumber