Vim kayıtlarını nasıl kullanırım?


925

Kayıtları kullanarak sadece bir örneği biliyorum CtrlR*ki ben bir panodan metin yapıştırmak yoluyla olduğunu.

Kayıtların diğer kullanımları nelerdir? Nasıl kullanılır?

VI kayıtları hakkında bildiğiniz her şey (vi 7.2'ye odaklanalım) - bizimle paylaşın.


22
Orada kayıtların kullanımı hakkında uzun bir cevap verdim
Benoit

Yanıtlar:


1185

Vim'deki kayıtlar, içinde depolanan metin üzerinde eylemler veya komutlar çalıştırmanıza izin verir. Bir kayda erişmek için, "akomuttan önce yazmanız gerekir ; burada akaydın adıdır. Geçerli satırı kayıt defterine kopyalamak kistiyorsanız,

"kyy

Veya büyük harf kullanarak bir kayda ekleyebilirsiniz

"Kyy

Daha sonra belgeyi hareket ettirebilir ve kullanarak başka bir yere yapıştırabilirsiniz.

"kp

Linux'ta sistem panosundan yapıştırmak için

"+p

Windows'ta sistem panosundan (veya Linux'ta "fare vurgulama" panosundan) yapıştırmak için

"*p

Şu anda tanımlanmış tüm kayıtlara erişmek için yazın

:reg

165
Ve "+sistem panosuna gönderme yapan özel bir kayıttır.
Aaron McDaid

17
Windows'da Panoya aşağıdakilerle erişilebilir "*; böylece dosya sonuna kadar kopyalama komutu olur "*yG.
Aditya MP

44
X'te (Linux, muhtemelen OS-X), *"fare vurgulama" panosu ve +Ctrl-XCV panosu.
dotancohen

20
Pano kaydına eklemenin bir yolu var mı (sermaye olmadığı için +)?
naitsirhc

8
@dotancohen Teknik olarak İLK seçim denir, ama sanırım "fare higlight" insanların almak daha kolay :)
kyrias

783

Kaydı keşfettiğimde memnun oldum 0. Metni belirli bir kayıt defterine atamadan ayırırsanız, 0kayıt defterine atanır ve varsayılan "kayıt defterine kaydedilir. 0Ve "registerları arasındaki fark 0, sadece yazılmış metinle doldurulurken, varsayılan yazmaç d/ D/ x/ X/ c/ C/ s/ Skomutları kullanılarak silinen metinle doldurulur .

Bazı metinleri kopyalamak, bir şeyi silmek ve kopyalanan metinle değiştirmek istediğimde bunu yararlı buluyorum. Aşağıdaki adımlar bir örneği göstermektedir:

  • Kopyalamak istediğiniz metnin yedeğini alın y[motion]- bu metin kaydedilir "ve 0kaydedilir
  • Değiştirmek istediğiniz metni silin d[motion]- bu metin "kayıt defterine kaydedilir
  • Yanmış metni şununla yapıştırın: "0p

"sonraki komut için bir kayıt kullanma komutu nerede .

Son adımda, varsayılan kayıttan (ile p) yapıştıracak olsaydınız, sildiğiniz metni kullanırdı (muhtemelen istediğiniz gibi değil).

Not olduğunu pveya Pvarsayılan kasadan macunlar. Uzun el eşdeğeri ""p(veya ""P) olur ve "0son sıralamayı "1tutar, son silme veya değişikliği tutar.

Daha fazla bilgi için bkz :help registers.


17
pveya Pvarsayılan kayıttan macunlar. Uzun el eşdeğeri ""p(veya ""P) olur.
nelstrom

186
Bu arada, "0 son kenarı tutar," 1 de son silme veya değişikliği tutar.
FireAphis

6
"sonraki komut için bir kayıt kullanma komutudur. Yani ""pkullanacağı "macun komutu için kayıt ve "0pkullanmak 0kayıt.
Ramon Marco L. Navarro

5
0pgeçerli satırın ilk karakterine gitmek ve varsayılan kayıt ( ") içeriğinden yapıştırmak anlamına gelir . "pkayıt piçin hangi komutu kullanacağınızı belirtmeniz gerektiğinden eksik bir komut olur .
Ramon Marco L. Navarro

15
Aynı şekilde "1 son silme işlemini tutar," 2 ikinci son silme işlemini tutar "3, üçüncü son silme işlemini tutar, vb." 9
James

330

Kayıtlarla ilgili en sevdiğim parçalardan biri onları makro olarak kullanmak!

Diyelim ki sekmeyle ayrılmış bir değer dosyasıyla şu şekilde ilgileniyorsunuz:

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

Şimdi% Dev alanının sonuna (2. satırdan başlayarak) bir yüzde işareti eklemeniz gerektiğine karar verin. (Rasgele seçilmiş) mkayıtta aşağıdaki gibi basit bir makro yapacağız :

  1. Basın:: qmKayıt altındaki makro kaydını başlatmak için m.

  2. EE: 3. sütunun sonuna gidin.

  3. a: Bu sütunun sonuna eklenecek modu girin.

  4. %: Eklemek istediğimiz yüzde işaretini yazın.

  5. <ESC>: Komut moduna geri dönün.

  6. j0: Sonraki satırın başına git.

  7. q: Makro kaydetmeyi durdur

Şimdi @mbu makroyu geçerli satırda çalıştırmak için yazabiliriz . Ayrıca, @@tekrarlamak veya 100@mbunu 100 kez yapmak için yazabiliriz ! Hayat güzel görünüyor.

Bu noktada “ AMA BEKLE, BU KAYITLAR KAYITLARLA NE YAPMALI ?” Demelisiniz.

Mükemmel nokta. mYazarak kaydın içeriğinde ne olduğunu araştıralım "mp. Sonra aşağıdakileri elde ederiz:

EEa%<ESC>j0

İlk başta bu yanlışlıkla not defterinde bir ikili dosya açmışsınız gibi görünüyor, ancak ikinci bakışta, makromuzdaki karakterlerin tam sırası!

Meraklı bir insansınız, bu yüzden ilginç bir şey yapalım ve !sıkıcı eski yerine bir metin eklemek için bu metin satırını düzenleyelim %.

EEa!<ESC>j0

O zaman bunu nyazarak kayıt altına alalım B"nyE. Daha sonra, sadece tekmeler için, nmakroyu kullanarak verilerimizin bir satırında çalıştıralım @n...

OMG, A EKLENDİ !

Esasen, bir makro çalıştırmak, o makronun kaydındaki anahtarların tam sırasına basmak gibidir. Eğer havalı bir kayıt numarası değilse, şapkamı yerim.


65
Bu tamamen anahtar. Şimdiye kadar kayıtların makro tamponlarla aynı olduğunu fark etmedim. Bu, tüm makrolarınızı metinde saklayabileceğiniz, onları sıralayabileceğiniz ve çalıştırabileceğiniz anlamına gelir. Oldukça havalı ve biraz garip. Çok Vim.
naught101

1
Küçük bir başyazı notu, ama kalın harflerle yazılmış bu kapak kilidi ... Düzeltilmiş olabilir. Şu anda oldukça iğrenç.
ashrasmun

1
Sonraki satırdaki ilk boş olmayan karaktere gitmek +yerine kullanabilirsiniz j0.
Gokul

100

Diğer faydalı kayıtlar:

"*veya "+- sistem panosunun içeriği

"/ - son arama komutu

": - son komut.

Vim makroları ile not edin, bunları düzenleyebilirsiniz, çünkü bunlar sadece makroyu kaydederken kullanılan tuş vuruşlarının bir listesidir. Böylece bir metin dosyasına makro "apyazabilir (makro a yazmak için kullanarak ) ve bunları düzenleyebilir ve bir kayıt defterine yükleyebilirsiniz "ay$. Yararlı makroları depolamanın güzel bir yolu.


6
OSX'teki varsayılan vim "* entegrasyonunu içermez. Homebrew-alt'tan bir sürüm yükleyebilirsiniz. Bunu kontrol edin vim --version- -clipboardsahip olmadığınız +clipboardanlamına gelir , demektir.
Xavier Shay

15
X11'de "*ve "+hatta daha serin: "+kopyalanan son metni ctrl+c(arabellek) veya kullandığınız kısayolu (veya right-click>copy) yapıştırır . "*fare ile vurgulanan son metni yapıştırır (seçim arabelleği). Bu nedenle, bir şeyi kopyalar ctrl+cve ardından fareyle başka bir şeyi vurgularsanız, hangisini yapıştıracağınızı seçebilirsiniz. Bu, bu iki kaydın eş anlamlı olduğu Windows'ta çalışmaz.
naught101

1
Ben arıyordum, Çok yaşa "*ve "+yıllarca! Ben sadece gvim sistem panoya erişimi olduğunu düşündüm, ama görünüşe göre düzenli vim de öyle!
Tarrasch

@Tarrasch gvim yerine konsol vim'i kullanırsanız çok daha fazla şey keşfedeceksiniz. Bence. freenode üzerinde #vim adresini ziyaret edin!
trusktr

1
Biri varsa nasıl etkinleştirmek için -xterm_clipboardüzerinde vim --version. Yüklemek için basit bir paket var mı? (debian / apt-get). Teşekkürler.
Dr Beco

77

Karadelik kayıt _ olan /dev/nullkayıtları.

Varsayılan kayıt defterini güncellemeden tek karakterlerin silinmesine izin vermek için vimrc dosyamda kullanıyorum:

noremap x "_x

ve varsayılan kaydı güncellemeden görsel moda yapıştırmak için:

vnoremap p "_dP

İkinci haritalama da çok faydalıdır. Bir açıklama için buraya bakın: marcorucci.com/blog/#visualModePaste
mrucci

21
için haritalama xkarakterleri aktarmak için daha az uygun hale gelir.
43'te skeept

X tuşuna basmak, çektiğiniz son şeyi silmez. Kayıt
0'dadır

2
Yukarıdaki skeept'in sözünü genişletmek için: bu xeşleme ile artık xpakımı bir sonraki karakterle değiştirmek için "komutu" kullanamazsınız . Yazım hataları için oldukça kullanışlıdır. Ayrıca Xpakımı bir önceki karakterle değiştirmeliyiz.
Daniel Andersson

56

Kaydın içeriğini eski mod komutuna yapıştırmak isterseniz, düğmesine basın <C-r><registerletter>.

Bunu neden kullanasın? Bir arama yapmak ve uzunca bir dize yerine koymak istedim, bu yüzden görsel modda seçtim, arama / değiştirme ifadesini yazmaya başladım :%s/[PASTE YANKED PHRASE]//gve günüme devam ettim.

Ex modunda yalnızca tek bir kelime yapıştırmak istiyorsanız, ex moduna girmeden önce imlecin üzerinde olduğundan emin olun ve sonra <C-r><C-w>ex modundayken sözcüğü yapıştırmak için tuşuna basın.


6
:Komut satırına metin yapıştırmak bugün öğrendiğim en iyi şey
Shahbaz

1
<CR> <registerletter>
komutunu

1
Ben sadece bul / değiştir regexes önce /[write out your regex]<cr>ve sonra sadece yerine yazmak gibi s/<C-R>//replacement/. Bu şekilde, değiştirmeyi çalıştırmadan önce normal ifadenizle ilgili canlı geri bildirimden yararlanabilirsiniz.
GabeIsman

44

Ben gizli guru kaydı ifade = register olduğunu düşünüyorum. Yaratıcı eşlemeler için kullanılabilir.

:inoremap  \d The current date <c-r>=system("date")<cr>

Yukarıdaki gibi sisteminizle birlikte kullanabilir veya özel VimL işlevlerinden vb. Yanıt alabilirsiniz.

veya sadece geçici

<c-r>=35+7<cr>

3
Derek Wyatt'ın [İfade kaydını kullanma videosu]
Jeromy Anglim

1
@JeromyAnglim'den bağlantı şu an burada: derekwyatt.org/vim/tutorials/advanced/#expression-register
Djizeus

39

Bir serin hile "1pson silme / değişikliği yapıştırmak için kullanmak (ve daha sonra .tekrar tekrar silme yapıştırmak için kullanın . Başka bir deyişle, "1p...temelde eşdeğerdir "1p"2p"3p"4p.

Bunu birkaç satırın sırasını tersine sıralamak için kullanabilirsiniz: dddddddddd"1p....


aha bu harika. Gerçekten istediğim şey, yanks için aynı davranıştır
RyanM

18

Vim'in yardım sayfasından:

CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
        Insert the contents of a numbered or named register.  Between
        typing CTRL-R and the second character '"' will be displayed
        <...snip...>
        Special registers:
            '"' the unnamed register, containing the text of
                the last delete or yank
            '%' the current file name
            '#' the alternate file name
            '*' the clipboard contents (X11: primary selection)
            '+' the clipboard contents
            '/' the last search pattern
            ':' the last command-line
            '-' the last small (less than a line) delete
            '.' the last inserted text
                            *c_CTRL-R_=*
            '=' the expression register: you are prompted to
                enter an expression (see |expression|)
                (doesn't work at the expression prompt; some
                things such as changing the buffer or current
                window are not allowed to avoid side effects)
                When the result is a |List| the items are used
                as lines.  They can have line breaks inside
                too.
                When the result is a Float it's automatically
                converted to a String.
        See |registers| about registers.  {not in Vi}
        <...snip...>

17
  • q5 düzenlemeleri kayıt 5'e kaydeder (sonraki q kaydı durdurur)
  • : reg tüm kayıtları ve içindeki tüm içerikleri göster
  • @ 5 kayıt 5 makrosunu çalıştır (kaydedilmiş düzenlemeler)

15
@ Tuşunun makroları (üç tuş vuruşu) başlatmasını sevmiyorum. Bu nedenle, q kaydında depolanan makroyu başlatmak için F2'yi eşledim: nmap <F2> @q q kaydını kullanıyorum, çünkü daha sonra F2'nin oynatılması için bir makro kaydetmek için sadece vurdum qq. hızlı makro kaydetme ve tekrar oynatma.
Andrej Panjkov

16

Fare için ulaşmak zorunda kalmadan vim penceremdeki metin için grep varsayılan kayıt kullanın.

  1. metin
  2. :!grep "<CTRL-R>0"<CR>

12

Komutlar kayıtlarını kullanın ile @. Örneğin:

echo @a
echo @0
echo @+

Bunları komut olarak ayarlayın:

let @a = 'abc'

Şimdi "apyapıştıracak abc.


8

Büyük bir karışıklık kaynağı varsayılan kayıttır ". Nasıl çalıştığını bilmek önemlidir. Varsayılan kayıttan çoğu zaman kaçınılması daha iyidir. Vim belgelerinden açıklama:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

Yani varsayılan kayıt aslında son kullanılan yazmacının bir göstergesidir. Bir şeyi sildiğinizde veya sildiğinizde bu kayıt diğer kayıtlara işaret edecektir. Kayıtları kontrol ederek bunu test edebilirsiniz. Her zaman varsayılan kayıt ile tam olarak aynı olan başka bir kayıt vardır: yank yazmacı ( "0), ilk silme yazmacı ( "1), küçük silme yazmacı ( "-) veya silmek veya çekmek için kullanılan diğer herhangi bir kayıt.

Tek istisna kara delik kaydıdır. Vim doc diyor ki:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

: Genellikle kadar daha iyi olduğunu doğrudan kullanarak vardır "0, "-ve "1-"9varsayılan kayıt defteri ya da adlandırılmış kaydolur.


8

Göz ardı edilen bir kayıt '.' nasıl eklendiğine bakılmaksızın en son eklenen metni içeren nokta yazmacı örn. ct] (sonrasına kadar değiştir). Sonra başka bir yere eklemeniz gerektiğini fark edersiniz, ancak nokta tekrarlama yöntemini kullanamazsınız.

 :reg .
 :%s/fred/<C-R>./

7

En sevdiğim kayıt ':'sicil. Koşu @:Normal modda beni daha önce eski komutu ran tekrarlamak için izin verir.


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.