VIM의 명령 줄에서 "커서 아래에있는 단어"를 어떻게 지정합니까?


86

VIM에서 "커서 아래에있는 단어"를 지정하는 명령을 작성하고 싶습니다. 예를 들어, 커서가 단어 위에 있고 두 번 나타나게한다고 가정 해 보겠습니다. 예를 들어, 단어가 "abc"이고 "abcabc"를 원하면 다음을 입력 할 수 있습니다.

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

하지만 커서를 "def"로 이동하고 동일한 명령을 사용하여 "defdef"로 변경할 수 있기를 바랍니다.

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

이 작업을 수행하도록 명령 줄에 명령을 작성하려면 어떻게해야합니까?

:s/\(*whatever is under the commandline*\)/\1\1

답변:


74

<cword>커서 아래에있는 단어입니다 (: help <cword>).

죄송합니다.이 답변이 더 완전해야했습니다.

명령을 nmap하거나 게으른 사용자를위한 일련의 키 입력이 작동합니다.

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

그런 다음 패턴을 입력 할 때 <control-r>0<enter>0 번째 레지스터의 내용을 명령에 붙여 넣을 수 있습니다 .

다음과 같이 명령을 작성할 수도 있습니다.

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

'\'와 'w'를 동시에 눌러 명령 줄을

:s/\(<currentword>\)/

17
나는 훌륭한 대답을 고맙게 생각하지만 아마도 근육 기억 때문에 yiw끝을 제안 할 것입니다 byw. 커서가 이미 단어의 첫 번째 문자에있는 시나리오 에서는를 생략 하고 간단히 입력 해야 하지만 in을 생략 할 수 있습니다 . 사고는 일어날 수 있고, 실수를 수정하는 것은 확실히 더 : 키 누르기됩니다bywiyiw
야곱 Swartwood

130

명령 줄 모드에서 CTRL+ R CTRL+ W는 커서 아래에 단어를 삽입합니다.

c_CTRL-R기타 모든 특수 레지스터 목록은 도움말을 참조하십시오 .

:help c_CTRL-R

28
yiwP

yiw: 내부 단어 (커서 아래에있는 단어)를 Yank합니다. 이 명령은 또한 커서를 단어의 시작 부분으로 이동합니다.

P: 커서 앞에 붙여 넣습니다.

그런 다음 eg : < ALT > - D를 다음 명령에 매핑 할 수 있습니다 .

:nmap < ALT >-D yiwP

4
문제는 특별히하지 명령 모드에서, Vim의 명령 행에서 "커서 아래에있는 단어를"지정에 대한했다
나단 Fellman을

12

이를 수행하는 또 다른 쉬운 방법은 *명령 을 사용하는 것 입니다.

일반 모드에서 단어 위에 입력하면

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

* 검색 패턴을 현재 단어로 만듭니다 (예 : \ <abc \>).

:s//현재 검색 패턴을 사용하여 대체를 수행 \0하고 대체 섹션에는 일치하는 문자열이 있습니다.

그런 다음 동일한 내용을 다시 입력하거나 입력하여 "def"라는 단어 위에이 동작을 반복 할 수 있습니다.

*@:

@: <Enter>없이 마지막 ex 명령을 반복합니다.이 경우 대체입니다.

q명령을 사용하여이 작업을 수행하는 빠른 매크로를 기록 할 수도 있습니다.

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

그런 다음 입력하여 마음에 드는 내용을 반복하십시오.

@d

두배로하고 싶을 때. 이것은 이전 솔루션보다 한 문자 적기 때문에 단어 두 배 사이에 다른 전 명령을 수행하지 않는 한 가치가 없을 수 있습니다.@:


1

매핑 내에서 백 슬래시를 이스케이프해야합니다. 매핑 내에 대체 문자열을 포함 할 수도 있습니다.

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

1
ywPx

당신이 설명하는 것을 할 것입니다.

ywPxw

커서를 다음 단어로 이동합니다.


문제는 특별히하지 명령 모드에서, Vim의 명령 행에서 "커서 아래에있는 단어를"지정에 대한했다
나단 Fellman을

명령의 모든 문자에 대해 이와 같은 대답을 설명하십시오.
Vitaly Zdanevich

0

@ user11211 에는 커서 아래의 단어를 복제 하는 가장 간단한 방법 이 있습니다.

yiwP

내부 단어를 잡아 당기고 (커서가 단어의 시작 부분으로 이동), 붙여 넣기 (커서 앞에).

예. straigh [t] forward ----> 단순 전쟁 [d] straightforward

[]은 커서입니다.

자세히 설명하기 위해 ...

중복 된 단어 뒤에 커서를두고 싶을 것입니다.

yiwPea

straigh [t] forward ----> straightforwardstraightforward []

노트:

yiw

내부 단어를 잡아 당깁니다 (공백 없음).

yaw

모든 단어를 잡아 당깁니다 (후행 공백 포함).

yawPea

따라서 공백 및 위치 커서를 포함한 중복 단어입니다.

straigh [t] forward ----> 직선 직선 []


질문은 명령 모드가 아닌 Vim의 명령 줄 에서 "커서 아래에있는 단어"를 지정하는 것이 었습니다 .
Nathan Fellman 2014

1
명령 모드 내에서 위의 일반 (명령 모드) 명령을 사용할 수 있습니다. 단순히 앞에 : normal ...을 추가하면됩니다. 예를 들어 : normal yiwP는 일반 모드의 yiwP와 동일하게 수행합니다. 물론 이것은 당신이 요청한 것을 수행하는 더 느린 방법입니다.
뚱보 Before Windows

-1
" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>

이것이 무엇을하는지에 대해 언급 할 수 있습니까?
Nathan Fellman

1
이것은 명령에 n플래그를 사용하여 :substitute커서 아래의 단어가 현재 버퍼에 나타나는 횟수를 인쇄합니다. 꽤 영리하지만 실제로이 질문에 대한 답은 아닙니다.
Jacob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.