현재 파일이 있습니다(현재 위치는 [n]입니다).
The [p]hilosophical chicken saw the street
The red dog saw the street
The red dog crossed the street
The apple was red
The red dog crossed the street
The red dog was sleeping
다음 4줄을 변경하고 싶습니다.빨간 개도착하다철학적 닭
제가 자주 접하게 되는 상황이고, 결국 마우스를 사용하게 되는 상황입니다.
최소한의 키 입력으로 이를 달성하는 가장 빠른 방법은 무엇입니까?
지금까지 나는 시도했다
- Ctrl+g를 눌러 줄 수를 세고 다음 줄을 세어 실행합니다.
:2,5s:red dog:philosophical chicken:g
- 많은 시간, 생각, 타이핑
- 매크로->
qu
/red dog
Enter
c2W
philosophical chicken
Esc
/red dog
Enter
q
2@u
- 완료되면 교체(:s)를 사용하는 것만큼 빠릅니다.
2yW j P 2dE
- 두 단어를 꺼내고(구두점 무시) 한 줄 아래로 이동한 후 커서 앞에 붙여넣고 두 단어 모두 삭제합니다.- 한 줄을 빠르게 완성하지만 이제 내 버퍼에는빨간 개, 그래서 다시 돌아가서 버퍼를 다시 캡처해야 합니다.
- 강조하다철학적 닭마우스로 터미널에서
Ctrl+Shift+C
,j 2cW
+ Ctrl+ Shift+ V,Esc
-를 클릭하여 텍스트를 복사하고 한 줄 아래로 이동하여 두 단어를 변경하고 삽입 모드로 들어가서 붙여넣고 Esc를 사용하여 삽입 모드를 종료합니다.- vim에 마우스가 있나요? :(
c2W
philosophical chicken
Esc
?red dog
Enter
.N.N.
- 단어 2개 변경, 탈출하려면 "Philosophy Chicken" 입력, "Red Dog"에 대한 역검색, 마지막 작업 수행(2개 단어를 Philosophy Chicken으로 변경), 반복- 완전한 두 단어를 다시 입력해야 합니다.
마우스를 사용하여 변경 사항을 복사하고 붙여넣는 것이 지금까지 나에게 가장 빠른 방법이었습니다. 이는 올바른 접근 방식이 될 수 없습니다.
어떻게 해야 합니까?
이상적으로는 2개의 단어를 꺼내어 red dog
2개의 단어를 가져온 버퍼로 탐색하고 교체하고 싶습니다.
답변1
@MattObert가 말한 내용을 최적화합니다.
- y3iw
- /
red dog
Enter - c3iwCtrl-r0Esc
- n.등.
상세히:
- y3iwyank
philosophical chicken
; y2W후행 공백을 포함하여 후자보다 약간 더 좋습니다. 이 iw부분은 또한 시작 부분이 아닌 첫 번째 단어의 중간에 커서를 놓았을 때 yank가 계속 작동하도록 보장합니다. - /
red dog
Enter첫 번째 것을 찾아보세요red dog
- c3iw삭제
red dog
(뒤에 공백 없이 다시) 및 삽입 모드로 전환 - Ctrl-r0레지스터에서 붙여넣기
0
(:h i_CTRL-R
및 참조:h quote0
) - Esc일반 모드로 전환
- n.다음을 찾아
red dog
이전 작업을 다시 실행합니다(예: 로 대체philosophical chicken
). - n.필요에 따라 반복합니다.
첫 번째 비결은 양크가 자동으로 등록에 저장된다는 것입니다 0
. 두 번째 비결은 삽입 모드에서 붙여넣기 레지스터를 사용할 수 있다는 것입니다 Ctrl-r.
도움이 될 수 있는 기타 사항:
- 줄 번호 켜기: (
:setlocal relativenumber! number!
끄려면 다시 실행하세요) - 매크로와 동일:
nnoremap <silent> <Leader>, :setlocal relativenumber! number!<CR>
- 커서 행을 기준으로 행 오프셋을 사용합니다.
:.,+6 s/.../.../
- 확인으로 교체:
:%s/red dog/philosophical chicken/gc
Drew Neal의 작품을 확인해보세요윔캐슬기타 유사한 팁을 확인하세요. Vim 관련 질문을 다음 사이트에 게시하는 것도 고려해 보세요.웹사이트 방문.
답변2
물론 이를 수행하는 방법은 여러 가지가 있습니다. 하지만 가장 쉬운 방법은 reddog을 검색하는 것입니다.
/red dog
그런 다음 두 단어를 변경하십시오.
c2w
이렇게 하면 다음을 입력할 수 있는 삽입 모드로 전환됩니다.
philosophical chicken
그런 다음 Esc키를 명령 모드로 다시 전환하고 다음을 입력합니다.
n.n.
red dog
의 모든 인스턴스를 교체할 때까지 philosophical chicken
. ( n
다음 검색 인스턴스가 전달되고 red dog
이전 .
명령이 반복됩니다.)
생각이 적고, 타이핑도 많지 않으며, 버퍼를 사용할 필요도 없습니다.(버퍼는 멋지다!)
제가 질문을 오해하고 있는 것일 수도 있지만, 이 방법은 너무 간단해 보여 왜 다른 사람들은 지나치게 생각하고 있는지 궁금합니다.
편집하다:
질문을 더 주의 깊게 읽은 후 위의 옵션 중 하나가 이것의 변형이라는 것을 알았지만 OP는 "두 개의 전체 단어를 다시 입력해야 한다"는 이유로 이를 거부했습니다. 미안합니다. 그러나 이것은 여전히 내가 선호하는 방법이다.
답변3
저는 보통 첫 번째 방법을 사용합니다. 하지만 이것이 마음에 들지 않으면 세 번째 방법을 약간 수정하는 것이 좋습니다.
"a2yW
, "철학적 닭"을 잡아 당깁니다버퍼 A 입력.j
예 를 들어, 원하는 방법을 통해 Red Dog로 이동하세요/red dog
.2dW
그리고"aP
(또는"aP
그리고2dE
) "철학적 치킨"을 붙여넣으세요 버퍼 A에서그리고 "Red Dog"를 삭제하세요.- 2단계와 3단계를 반복합니다(버퍼 A가여전히 포함"철학적 닭"). 이전에 "red dog"을 검색한 적이 있다면
n
반복 검색을 이용하세요.j
이전에 사용한 적이 있다면 다음을 사용하세요2Bj
(또는 3행에서 5행으로 이동 등).2B2j
답변4
philosophical chicken
첫째, 다시 입력하는 것보다 짧기 때문에 잡아당깁니다 . 그런 다음 내 플러그인 중 하나를 사용하겠습니다.
대안 A
그리고 내전역 플러그인 변경, 입력된 텍스트(여기서는 붙여넣은 레지스터)로 gc{motion}
대체되고 red dog
다음의 모든 /[count] 발생에 다시 적용됩니다.
"ay2ejgc2e<C-R>a<Esc>
대안 B
하지만 붙여넣기보다는 편집에 더 적합합니다. 드물게 발생하는(또는 이후에 발생하지 않는) 상황의 경우 나는 다음을 선호합니다.바꾸기(ReplaceWithRegister) 플러그인, 레지스터를 통해 텍스트를 덮어쓸 수 있습니다 gr{motion}
. 예를 들어, 저는 보통 +w
다음 이벤트로 이동합니다. search/ 를 사용할 수도 있습니다 n
.
y2ejgr2e+w.2+w.+w.