Birden fazla Vim örneği arasında komut geçmişi nasıl çözülür?


15

Vim, eski komutların geçmişini tutar ( :ve aracılığıyla erişilebilir q:) ve bıraktıktan sonra geçmiş kalır.

Birden fazla Vim örneği çalıştırırsam (aynı kullanıcı, aynı giriş dizini), Vim komut geçmişleri arasında nasıl tahkim yapar? Çıkmak için son süreç kazanıyor gibi görünüyor. Tüm örneklerin komut geçmişini tutmanın bir yolu var mı?


1
Gerçekten mi? Bu tarih beni bıraktıktan sonra da devam etmiyor. (Vim 7.4.52, Ubuntu 14.04)
Doorknob

3
@Doorknob Size ~/.viminfoait olduğundan emin olun . Ortak bir hata, insanların daha sudo vim ...önce kendi kullanıcı olarak vim çalıştırmadıysanız, ~/.viminfokök olarak oluşturacakları çalıştırmasıdır . Sorun buysa, ayrıcalıklı dosyaları kullanmayı sudoeditveya sudo -edüzenlemeyi öğrenmenizi öneririm .
jamessan

@jamessan Huh, görünüşe göre sorun buydu; chown.viminfo'yu kendime geri döndürerek düzelttim (Her zaman kullandığımdan beri sahipliğinin köküne nasıl değiştiğinden emin değilim sudoedit, ama oh iyi.)
Doorknob

Yanıtlar:


10

Başlık sorunuzun cevabı gözlemlediklerinizdir. Vim kullanım kılavuzundan:help 21.3

Vim'i birkaç kez çalıştırdığınızda, son çıkan çıkış bilgilerini saklar. Bu, daha önce depolanan Vims'den çıkan bilgilerin kaybolmasına neden olabilir. Her madde sadece bir kez hatırlanabilir.

Ancak, viminfo dosyasının dosya adı (komut geçmişinin depolandığı yer, global işaretler ve bu şekilde yapılandırılmışsa kayıt içeriği gibi diğer şeyler arasında) değiştirilebilir! Bu, farklı projeler veya vim örnekleri için farklı 'tarihler' ayarlayabileceğiniz anlamına gelir. Proje başına birden fazla vim örneği çalıştırmadığınız varsayılarak, vimfo dosya adını vimrc (veya diğer proje ayarları eklentisi) aracılığıyla yönetmek bunu halletmenin harika bir yoludur.

Alternatif viminfo dosyalarını kur

Proje düzeyinde yönetim için vimfo'nuzu farklı bir dosyaya kaydetmek üzere vim'i yapılandırmak istiyoruz. Bu, bırakmadan önce çalışan bir vim içinde veya vimrc tarafından yapılabilir, örneğin vimrc'nizde belirli bir dizini bir projeye ait olarak algılayan çizgiler olabilir.

:set viminfo+=nPath/to/custom/viminfofile

Vimrc'nin bunu dizine göre otomatik olarak ayarlamasına bir örnek:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Yukarıdakilerin sonucu, vim / projects / projA dizininde başlatılırsa, projeye özgü geçmiş başlangıçta yüklenecek ve çıkışta kaydedilecektir.

Başlatma sırasında alternatif bir viminfo yükleyin

Bu, geçmişinizi bir tarafa kaydetmek ve daha sonra bir proje düzeyinde yönetmeden yüklemek istediğiniz durum için iyidir.

İlk olarak, geçmişi kaydetmek için, çıkmadan önce yukarıdaki gibi viminfo seçeneğine eklersiniz. Ardından geçmişi yüklemek için vi'yi -i seçeneğiyle başlatın

vim -i Path/to/custom/viminfofile

Viminfo dosyasını kaydetmek için vim'den çıkmak istemiyorsanız, :wv( :wviminfo) öğesini kullanabilirsiniz . Bu, yukarıdaki n ayarına göre vim'den çıkmadan viminfo dosyasını kaydeder. Ayrıca, :wv SomeOtherFileviminfo seçeneğindeki ayarla aynı olmayan bir konuma kaydetmek için de yapabilirsiniz . Bu, çıkışta kullanılacak dosya adını ayarlamaktan daha uygun olabilir, ancak çıktıktan sonra vim'in varsayılan dosyayı kullanmasını durdurmaz.

Örneğin, ilk vim:

:wv ~/customInfo

ve ikinci terminalde:

vim -i ~/customInfo

Veya ikinci bir vim zaten çalışıyorsa ve viminfo'yu yüklemek istiyorsanız:

:rv ~/customInfo

Unutmayın :wvve :rvvim dosyasının adını değiştirmeyin çıkışta veya başlangıç ​​sırasında okunan dosyanın adını kaydedemezsiniz.

Ek bilgi

Açıklama set viminfo+=nSomePath: adlı seçeneği ayarlamak için set komutunu kullanırız viminfo. +=Biz seçeneği değil, değişim her şey için eklemek istediğiniz belirtir. Biz eklemek nviminfo için ismini belirtmek seçeneği. Viminfo'yu kaydetmek için kullanılan dosya adı hemen nbize SomePathulaştıktan sonra.

wv( :help wv) Belgeleri , bu komutun önce viminfo dosyasını okuyacağını, ardından eski ve yeni bilgiler arasında birleştirileceğini gösterir. Şimdiye kadar bu durumda birleştirmenin nasıl çalıştığı hakkında hiçbir bilgim yok, ancak geçerli oturumda ayarlanmayan bilinmeyen dosyalar ve kayıtlar için işaretler tuttuğunu tahmin ediyorum.

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.