삽입 모드로 들어 가지 않고 둘 이상의 문자를 바꾸는 방법


12

다음과 같은 줄이있는 파일이 있습니다.

foofoo.xy.barbar

나는 변경할 xy에를 gh. 내가 시도 2r-> gh하지만, 분명히이 교체로,하지 작업을했던 그 xy와 함께 gg왼쪽에 내 커서 하나의 자리를 이동 한 후합니다.

삽입 모드로 들어 가지 않거나 더 많은 키 입력 (예 :)을 사용하지 않고이 작업을 수행하는 방법이 :s/xy/gh/있습니까?


2
R교체 모드로 들어갑니다. :help replace-mode자세한 내용은.
alxndr

나는 노력했다 vt.rgh. 그러나 커서 위치를 제외하고 결과는 동일합니다.
Gonçalo Ribeiro 1

2
삽입 모드로 들어가고 싶지 않은 이유는 무엇입니까? 같은 cwgh<esc>것이 잘 작동합니다.
Doorknob

1
@ durron597 minimize-keystrokes좋은 태그 인지 확실하지 않습니다. 일반적으로 질문에 관한 것이 아닙니다 . (제안 된 수정 사항을 거부했습니다.) ... 아마도 메타에서 논의해야합니까?
Martin Tournoij

답변:


19

새 텍스트가 이전 텍스트와 길이가 같으면 Vim의 대체 모드 가 옵션입니다. 일반 모드 R(자본 "r")에서 대체 모드로 전환됩니다. 이것은 다른 텍스트 편집기의 "덮어 쓰기"와 유사합니다. 삽입 모드에서와 같이 새 문자를 삽입하는 대신 입력하면 커서 아래의 문자가 바뀌고 다음 커서로 넘어갑니다. (소문자 r와 같지만 한 번에 하나 이상의 문자 만 생각하십시오 .)로 교체 모드에 대한 설명서를 찾으십시오 :help replace-mode.

귀하의 경우 : 사이의 커서로 .하고 x, 눌러 모드를 대체하는 얻을 R. 입력 g하면 "x"가 바뀌고 다음 문자로 이동하므로 h"y"를 바꾸려면 입력 할 수 있습니다 . 이제 편집이 완료되었으므로 Escape일반 모드로 돌아갑니다.

(이것은 대체 텍스트가 이전 텍스트와 길이가 같을 때 작동하지만 대체가 더 길거나 짧으면 c필요한 모든 것일 수 있습니다 . 이동 내의 텍스트 1 을 입력 한 텍스트로 바꿉니다. 여러 가지 방법이 사용을 할 수 c사이의 커서 : 예를 들어, .x, ct.ABCEscape에 말했다 의 C hange 텍스트 (최대 ' t의 위원장은 다음을 .) "ABC"를 참조).


1 무브먼트의 텍스트를 명명되지 않은 / "레지스터 로 붙인 다음 삽입 모드로 전환하여 대체 할 내용을 입력 한 다음 Escape다시 일반 모드 로 되돌릴 수 있습니다.


2
이것은이 경우에 효과적입니다. 이 2 개의 문자를 3 개의 문자로 바꾸려면 어떻게해야합니까?
Gonçalo Ribeiro 1

1
좋은 질문; 다른 길이의 텍스트를 처리하는 방법을 포함하도록 수정되었습니다.
alxndr

그래, 나도 알아 그러나 그렇게하면 삽입 모드로 들어가고 그 경우 삽입 모드를 사용하지 않는 방법이 있는지 궁금합니다. 나는 그것이 매우 유용하다고 생각하지는 않지만 (그러나 나는 틀릴 수있다).
Gonçalo Ribeiro 1

1
대상 문자 nn-발생 까지 대체 할 숫자 로 접두어를 붙입니다. 이것은 레이블의 일부를 형식 w_x_y_z및 로 바꾸는 데 유용합니다 a-b-c-d. 제한 문자도 제거하는 f대신 사용하십시오 t.
pkfm

5

이 작업을 수행 할 수있는 몇 가지 방법이 있지만 내가 생각할 수있는 가장 간단한 방법은 다음과 같습니다.

TL; DR

fxcw<REPLACEMENT TEXT>

설명

  • fxx로 이동합니다 (참조 help *f*).
  • cw단어를 변경하고 (자세한 내용 :h *c*:help *w*, 및 참조 :help cw) "xy"텍스트를 제거하고 삽입 모드로 들어가서 원하는 것을 원하는 곳에 놓을 수 있습니다.
  • <교체 텍스트>는 예제에서 "gh"로 대체하려는 것입니다.

이 방법의 장점 중 하나는 매우 일반적으로 사용되는 텍스트 조작 및 탐색 명령을 사용한다는 것입니다. 또 다른 하나는 "xy"의 길이가 길 수 있으며 여전히 작동한다는 것입니다.

cw작품은 텍스트 객체 기간 (둘러싸여 있기 때문에 .단어에 대한 경계 역할).

커서가 이미 "y"문자 (또는 대체 할 텍스트의 문자)에 있으면을 사용할 수 있습니다 ciw<REPLACEMENT TEXT>. 이것은 vim에게 당신이 단어의 시작 부분에 있지 않더라도 자신이 속한 단어를 바꾸도록 지시합니다. 일반적으로 텍스트 객체에 :help text-objects대한 자세한 내용을 참조하십시오 ciw.


이것이 삽입 모드에 있지 않습니까?
elyashiv

1
아-그의 질문의 그 부분을 잡지 않았다. 이 경우 예-R이 가장 적합한 솔루션입니다.
Cody Poll

3

교체 모드 :

Rgh<Esc>

교체가 원본과 길이가 같지만 가능한 경우 가장 확실한 솔루션입니다.

2sgh<Esc>

또는:

cegh<Esc>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.