Jak określić „słowo pod kursorem” w linii poleceń VIM?

86

Chcę napisać polecenie, które określa „słowo pod kursorem” w VIM. Na przykład, powiedzmy, że mam kursor na słowie i sprawiam, że pojawia się dwukrotnie. Na przykład, jeśli słowo to „abc”, a ja chcę „abcabc”, mogę wpisać:

:s/\(abc\)/\1\1/

Ale wtedy chciałbym móc przesunąć kursor do „def” i użyć tego samego polecenia, aby zmienić go na „defdef”:

:s/\(def\)/\1\1/

Jak mogę napisać polecenie w wierszu poleceń, aby to zrobiło?

:s/\(*whatever is under the commandline*\)/\1\1
Nathan Fellman
źródło

Odpowiedzi:

74

<cword>jest słowem pod kursorem (: help <cword>).

Przepraszam, powinienem był być bardziej kompletny w tej odpowiedzi.

Możesz przypisać do niego polecenie lub ta seria naciśnięć klawiszy dla leniwych zadziała:

b #go to beginning of current word
yw #yank to register

Następnie, kiedy będziesz wpisywać swój wzorzec, możesz nacisnąć, <control-r>0<enter>który wklei do polecenia zawartość zerowego rejestru.

Możesz również wydać polecenie, takie jak:

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/

Który odwzoruje naciśnięcie '\' i 'w' w tym samym czasie, aby zastąpić linię poleceń

:s/\(<currentword>\)/
hazzen
źródło
17
Doceniam świetną odpowiedź, ale prawdopodobnie zasugerowałbym yiwkoniec bywtylko ze względu na pamięć mięśni. W scenariuszu, w którym kursor już dzieje się na pierwszym znaku w słowie, to należy pominąć bi po prostu wpisać ywvs ty może pominąć iin yiw. Wypadki mogą się zdarzyć, i mocowania błąd jest z pewnością bardziej keypresses :)
Jacob Swartwood
130

W trybie wiersza poleceń CTRL+ R CTRL+ Wwstawi słowo pod kursorem.

Zobacz pomoc dotyczącą c_CTRL-Rlisty wszystkich innych rejestrów specjalnych:

:help c_CTRL-R
César Alforde
źródło
28
yiwP

yiw: Yank wewnętrzne słowo (słowo pod kursorem). To polecenie przenosi również kursor na początek słowa.

P: Wklej przed kursorem.

Następnie możesz zmapować np .: < ALT > - Ddo tego polecenia:

:nmap < ALT >-D yiwP
user11211
źródło
4
Pytanie dotyczyło w szczególności określenia „słowa pod kursorem” z linii poleceń Vima, a nie z trybu poleceń
Nathan Fellman,
12

Innym prostym sposobem na to jest użycie *polecenia.

W trybie zwykłym po nad wyrazie wpisz

*:s//\0\0<Enter>

* ustawia wzorzec wyszukiwania jako słowo bieżące (np. \ <abc \>).

:s//dokonuje podstawienia przy użyciu bieżącego wzorca wyszukiwania, aw \0sekcji zamiany znajduje się dopasowany ciąg.

Możesz następnie powtórzyć to zachowanie, wypowiedzieć słowo „def”, wpisując ponownie to samo lub wpisując

*@:

@: po prostu powtarza ostatnią komendę ex, bez potrzeby stosowania <Enter>, w tym przypadku podstawienia.

Możesz również nagrać szybkie makro, aby to zrobić, używając qpolecenia

qd*:s//\0\0<Enter>q

Następnie powtórz to do syta, pisząc

@d

kiedy nad słowem, które chcesz podwoić. Ponieważ jest to tylko o jeden znak mniej niż poprzednie rozwiązanie, może nie być tego warte - chyba że będziesz wykonywać inne ex-polecenia między podwajaniem słów, które zmieniłyby zachowanie@:

rampion
źródło
1

Musisz uciec przed ukośnikami odwrotnymi w mapowaniu. W mapowaniu można również uwzględnić ciąg zastępczy.

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>

źródło
1
ywPx

zrobi to, co opisujesz.

ywPxw

przesunie również kursor do następnego słowa.

bmb
źródło
Pytanie dotyczyło w szczególności określenia „słowa pod kursorem” z linii poleceń Vima, a nie z trybu poleceń
Nathan Fellman,
Proszę opisać odpowiedzi w ten sposób, każdą literę w poleceniu.
Witalij Zdanevich
0

@ user11211 ma najprostszy sposób na skopiowanie słowa pod kursorem:

yiwP

yank wewnętrzne słowo (przenosi kursor na początek słowa), wklej (przed kursorem).

na przykład. straigh [t] forward ----> straightforwar [d] straightforward

[] to kursor

Opracować...

Prawdopodobnie chcesz, aby kursor podążał za zduplikowanym słowem:

yiwPea

prosto [t] forward ----> straightforwardstraightforward []

UWAGA:

yiw

jest wewnętrznym słowem szarpiącym (bez spacji)

yaw

to yank wszystkie słowa (łącznie z końcowymi białymi znakami).

yawPea

jest zatem zduplikowanym słowem zawierającym białe znaki i ustawiający kursor.

straigh [t] forward ----> straightforward straightforward []

BBW przed Windows
źródło
Pytanie dotyczyło w szczególności określenia „słowa pod kursorem” z linii poleceń Vima , a nie z trybu poleceń.
Nathan Fellman
1
Możesz użyć dowolnego z powyższych normalnych poleceń (trybu poleceń) w trybie poleceń, po prostu poprzedzając je: normal ... na przykład: normal yiwP zrobi to samo, co yiwP w trybie normalnym. Jest to oczywiście wolniejszy sposób robienia tego, o co prosiłeś.
BBW przed Windows
-1
" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
SergioAraujo
źródło
czy mógłbyś skomentować, co to robi?
Nathan Fellman
1
To używa nflagi do :substitutepolecenia, aby wydrukować, ile razy słowo pod kursorem pojawia się w bieżącym buforze. Całkiem sprytny, ale właściwie nie jest odpowiedzią na to pytanie.
Jacob