Vim - vim'i başlatırken hemen bir komut nasıl çalıştırılır?


103

:FindFileCache .Hızlı açılış için bir dosya önbelleği toplamak için vim'i her başlattığımda çalışması gereken bir eklentim (FindFile.vim) var .. Yine de vim'i her başlattığımda bunu çalıştırmam gerekiyor.

Vim her başladığında bir kez çalışan bir komutu nasıl yazabilirim?

Yanıtlar:


145

Yapılandırma öğelerinizi saklamak için en iyi yer .vimrc dosyanızdır. Ancak, çok erken kaynaklandı, kontrol edin :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

Gördüğünüz gibi, .vimrc dosyanız eklentilerden önce yüklenecek. Eğer içine koyarsanız :FindFileCache ., o komut henüz mevcut olmadığı için bir hata oluşacaktır. (Eklenti 4. adımda yüklendikten sonra mevcut olacaktır.)

Bunu çözmek için, komutu doğrudan yürütmek yerine bir otomatik komut oluşturun. Otomatik komutlar, bir olay meydana geldiğinde bazı komutları yürütür. Bu durumda, VimEnter olayı uygun görünüyor (şuradan :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.

Ardından, bu satırı .vimrc dosyanıza yerleştirin :

autocmd VimEnter * FindFileCache .

2
+1, bu kabul edilen cevap olmalıdır, tek bir komut için ayrı bir dosya oluşturmaktan çok daha temizdir.

Eklemek isterim ki, E172 ile başıma bir ara verdim çünkü daha sonra bir boşluk vardı.
Caroline

Bu yaklaşımı arama için kullanmayı denedim: AnsiEsc, ancak gerçekten istenen etkiye sahip değildi - aşağıdaki gibi bir komutun nasıl tespit edileceğini biliyorsunuzdur: AnsiEsc daha önce çalıştırılmış mı?
2016

89

Ayrıca vim'in -c bayrağı da vardır. Bunu tmuxp yapılandırmamda vim'in dikey bir bölünmeyle başlamasını sağlamak için yapıyorum:

vim -c "vnew"

En azından neovim ile bir dosyayı aynı anda da açabilirsiniz:

nvim -c "colorscheme mustang" some_file

6
Teşekkürler, aradığım şey buydu. Bazen, gösterdiğiniz gibi split gibi geçici bir başlatma komutu çalıştırmam gerekiyor ve bunu
vimrc dosyamda saklamama

Bu bir dosyayı açamaz:vim -c ':colo default' test.txt
van abel

1
Benim için de mükemmel - kullanıyorum xolox/vim-notesve Vim'i kullanıma hazır yeni bir notla açan bir balık işlevi istiyorum.
wsams

13

Adlı bir dosya oluşturun ~/.vim/after/plugin/whatever_name_you_like.vimve doldurun

FindFileCache .

Vim dizinlerinde komut dosyalarının okunduğu ve çalıştırıldığı sıra şu bölümde açıklanmıştır: :help 'runtimepath'


2

Diğer yanıtlardan bile geç, ancak yine de başlangıçtan hemen sonra almak için .vimrc'de bir zamanlayıcı kullanın. Örneğin, .vimrc'deki bu kod, bir değişken ayarlamadan önce başlangıçtan sonra yarım saniye bekler.

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

(Örnekteki değişken, YouCompleteMe eklentisinin kara listesidir. Eklentinin eşzamansız olarak başka bir işlemi başlattığını ve daha sonra değişkenler yarattığını varsayıyorum, ancak vim başladığında tam olarak hazır değil. .vimrc, bir after file veya VimEnter olayı olarak ayarlayın. Bu, bir şekilde Windows sistemime özgüdür, YCM dokümantasyonu .vimrc'nin seçenekleri ayarlamak için çalışması gerektiğini söylüyor.)


1

Put FindFileCachein senin.vimrc .

Autload komutları farklıdır ve senaryonuz için çalışmayacaktır.


buna işaret ettiğiniz için teşekkürler, aslında plugindeğildi autoload.
Benoit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.