Vim - cara menjalankan perintah segera saat memulai vim?

103

Saya memiliki sebuah plugin (FindFile.vim) yang perlu dijalankan :FindFileCache .setiap kali saya memulai vim untuk mengumpulkan cache file untuk pembukaan cepat .. Saya harus menjalankan ini setiap kali saya memulai vim.

Bagaimana saya bisa menulis perintah yang berjalan sekali, setiap kali vim dijalankan?

penguji
sumber

Jawaban:

145

Tempat terbaik untuk menyimpan barang-barang konfigurasi Anda adalah di file .vimrc Anda . Namun, itu bersumber terlalu dini, periksa :h startup:

At startup, Vim checks environment variables and files and sets values
accordingly.  Vim proceeds in this order:

1. Set the 'shell' and 'term' option                *SHELL* *COMSPEC* *TERM*
2. Process the arguments
3. Execute Ex commands, from environment variables and/or files *vimrc* *exrc*
4. Load the plugin scripts.                                 *load-plugins*
5. Set 'shellpipe' and 'shellredir'
6. Set 'updatecount' to zero, if "-n" command argument used
7. Set binary options
8. Perform GUI initializations
9. Read the viminfo file
10. Read the quickfix file
11. Open all windows
12. Execute startup commands

Seperti yang Anda lihat, .vimrc Anda akan dimuat sebelum plugin. Jika Anda memasukkannya :FindFileCache .ke dalamnya kesalahan akan terjadi, karena perintah itu belum ada. (Ini akan ada setelah plugin dimuat di langkah 4.)

Untuk mengatasi ini, alih-alih menjalankan perintah secara langsung, buat perintah otomatis. Perintah otomatis menjalankan beberapa perintah saat suatu peristiwa terjadi. Dalam kasus ini, acara VimEnter terlihat sesuai (dari :h VimEnter):

                                                    *VimEnter*
VimEnter                    After doing all the startup stuff, including
                            loading .vimrc files, executing the "-c cmd"
                            arguments, creating all windows and loading
                            the buffers in them.

Kemudian, letakkan saja baris ini di .vimrc Anda :

autocmd VimEnter * FindFileCache .
sidyll
sumber
2
+1, ini harus menjadi jawaban yang diterima, ini jauh lebih bersih daripada membuat file terpisah untuk satu perintah.
Ingin menambahkan saya mengalami break ini pada saya dengan E172 karena saya memiliki spasi setelahnya.
Caroline
mencoba menggunakan pendekatan ini untuk memanggil: AnsiEsc namun itu tidak benar-benar memiliki efek yang diinginkan - apakah Anda tahu cara mendeteksi jika perintah seperti: AnsiEsc telah dijalankan sebelumnya?
serup
89

Ada juga bendera -c dari vim. Saya melakukan ini di konfigurasi tmuxp saya agar vim dimulai dengan pemisahan vertikal:

vim -c "vnew"

Setidaknya dengan neovim kamu juga bisa membuka file sekaligus:

nvim -c "colorscheme mustang" some_file
djangonaut
sumber
6
Terima kasih, inilah yang saya cari. Terkadang, saya hanya perlu menjalankan perintah startup sementara seperti split seperti yang Anda tunjukkan, dan tidak perlu menyimpan ini di file vimrc saya
verboze
Ini tidak dapat membuka file:vim -c ':colo default' test.txt
van abel
1
Sempurna untuk saya juga - saya menggunakan xolox/vim-notesdan saya ingin fungsi ikan yang membuka Vim dengan nada baru siap digunakan.
wsam
13

Buat file bernama ~/.vim/after/plugin/whatever_name_you_like.vimdan isi dengan

FindFileCache .

Urutan pembacaan dan eksekusi skrip di direktori vim dijelaskan di :help 'runtimepath'

Benoit
sumber
2

Untuk mendapatkan jawaban yang lebih lambat dari jawaban lain tetapi tetap setelah startup, gunakan timer di .vimrc. Misalnya, kode dalam .vimrc ini menunggu setengah detik setelah startup sebelum menyetel variabel.

function DelayedSetVariables(timer)
    let g:ycm_filetype_blacklist['ignored'] = 1
endfunction
let timer=timer_start(500,'DelayedSetVariables')

(Variabel dalam contoh adalah daftar hitam dari plugin YouCompleteMe. Saya berasumsi, plugin memulai beberapa proses lain secara asinkron yang kemudian membuat variabel, tetapi belum cukup siap pada saat vim dimulai. Variabel tidak ada ketika saya mencoba untuk setel di .vimrc, file setelahnya, atau acara VimEnter. Ini khusus untuk sistem Windows saya, dokumentasi YCM mengatakan .vimrc seharusnya berfungsi untuk opsi pengaturan.)

kurang dari ideal
sumber
1

Taruh FindFileCachedi .vimrc.

Perintah muat otomatis berbeda dan tidak akan berfungsi untuk skenario Anda.

matpie
sumber
terima kasih telah menunjukkan hal itu, sebenarnya plugintidak autoload.
Benoit