Vim'deki geçerli satırla eşleşen satırlar nasıl aranır


11

Genellikle kelimeleri arayabilirim :/string, ancak geçerli satırın tamamını aramak zorunda kalırsam, bunu nasıl yapacağım.

event: 1  beacon: 0x02              //line 1
event: 19 beacon: 0x02              //line 2
event: 1  beacon: 0x03              //line 3
event: 1  beacon: 0x02              //line 4
event: 8  beacon: 0x01              //line 5
event: 19 beacon: 0x02              //line 6
event: 1  beacon: 0x02              //line 7

Örneğin cursor, şu anda mevcut satırın tamamını içeren metne line 1benzer şekilde nasıl arama yapılacağı konusunda :/. İmleç daha sonra eşleşmeye atlamalı line 4ve tekrarline 7

Yanıtlar:


7

İşte böyle yapardım:

  1. Sondaki satırsonu dahil edilmeden satırı (adsız kayıt defterine) Yank: 0y$
  2. Çok nomajik bir arama başlatın :/\V
  3. Yanmış satırı ekleyin: <c-r>"
  4. Aramayı başlat: <cr>

As @EvergreenTree yorumunda işaret , sen elbette tek seferde tüm adımları gerçekleştirmek için bir eşleme oluşturabilirsiniz:

nnoremap <leader>* 0y$/\V<c-r>"<cr>

İlgili yardım konuları:

:help registers
:help /magic
:help c_CTRL-R

Not: Aradığınız çizgi ters eğik çizgiler içeriyorsa, çok nomajik bir aramada bile yine de bunlardan geçip (başka bir ters eğik çizgi ekleyerek) kaçmanız gerekir .


4
Tabii ki, bunun için bir eşleme de oluşturabilirsiniz: nnoremap {key} 0y$/\V<c-r>"<cr>
EvergreenTree

9

Özellikle haritalama amacıyla, getline()kendiniz yapmaktan daha zarif kullanmayı düşünüyorum. getline()Bir dize ile çağrı yapmak '.'imlecin altındaki satırı döndürür. Bunu kullanmak için iki iyi seçenek vardır:

:exec '/' . getline('.')

hangi dizeleri ayrıştırır ve birlikte '/'döndürülen getline()ve bir vim komutu olarak yürütür.

veya

/<C-r>=getline('.')<CR>

hangi ifade yazmacını kullanır @=. Aşağıdaki ifade =ilkinden sonra değerlendirilir <CR>ve komut satırına yerleştirilir.


Güzel! Çizgi gibi karakter içeriyorsa /veya 'çok iyi çalışmıyorsa. Her neyse, bugün bir şeyler öğreniyorum! Teşekkür ederim
Luc M

4

Şahsen görsel bir yıldız eklentisi alırdım ( çok az var ). Bununla ilgili güzel bir Vimcast var: Seçilen metni arayın . Bu, çizgiyi görsel olarak seçebileceğiniz ve ardından düğmesine basabileceğiniz anlamına gelir *.

Bir eklenti sizin işiniz değilse, aşağıdaki eşlemeyi kendinize ekleyebilirsiniz vimrc:

xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>

Not: Visual-block ( <c-v>) bu eşleme için desteklenmez.


Eşlemeleri ekledim ama aslında ilk eşleşen kelimeye atlıyor ve tüm satırı seçmiyor.
manav mn

Bir kelimeyle eşleşiyorsa *, normal moddan kullandığınızı veya eşlemenin doğru bir şekilde yüklenmediğini varsayıyorum .
Peter Rincker

4

Satırınız bir kalıbın parçası olarak yorumlanan belirli öğeler içeriyorsa, mevcut yanıtların tümü başarısız olur. Buradaki \Vnokta, yolun çoğunu alıyor ancak ters eğik çizgiyle uğraşıyor.

Ters eğik çizgilerden kaçmak için bunu deneyin ...

/\V<C-R>=escape(getline('.'), '\')

Ve sonra bir eşlemede kullanıyorsanız <Enter>, nasıl çalışmasını istediğinize bağlı olarak sonunda bir veya iki s gerekir .


Mükemmel cevap! Çizgiler genellikle diğer cevapları karıştıran iki tür eğik çizgi içerir. Bu son kaçış argümanı da öne eğik çizgi içermelidir:escape(…, '/\')
bobbogo

2

İle vim-yıldız işareti sadece kullanmak yüklü V$*(veya 0v$*) geçerli satırı seçip ona aramak için.

İkinci komutta 0, imleç satırın başındaysa gerekli değildir.


1
Does not *yalnızca geçerli görsel seçimi imlecin altındaki kelimeyi aramak için değil?
EvergreenTree

1
@EvergreenTree Eklentiden bahsetmeyi unuttum. Bildirim için teşekkürler
adelarsq

2

Bunu yapmanın bir yolu da komut satırı penceresini kullanmaktır: yy/<Ctrl-F>p<Enter>

  • İhtiyacınız olan tüm hat Yank yy
  • /Komut satırı penceresini açmak için tuşuna ve ardından Ctrl-F tuşlarına basın
  • pÇizgiyi yapıştırmak için basın
  • Aramayı başlatmak için Enter tuşuna basın

5
Ayrıca q/,/<c-f>
16:59 de evilsoup ile

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.