[vim] range설정하고 패턴 검색 후 action 취하기

익명 사용자의 이미지

우선 아래와 같은 파일이 있습니다.

  1 hello
  2 hi
  3 world
  4 good
  5 hello
  6 morning
  7 hello

앞에 숫자는 vim에서 set nu로 인해 표시된 행번호일뿐, 각 행은 시작은 알파벳입니다.

제가 하고 싶은것은, 현재 커서가 2열(hi)에 있을 때, 현재 열부터 6번 열까지에서 /^h/를 검색하여 일치를 하면 그 행의 첫 글자에 #을 삽입하고 싶습니다.

즉,

아래와 같은 결과가 제가 원하는 것입니다.

  1 hello
  2 #hi
  3 world
  4 good
  5 #hello
  6 morning
  7 hello

문서 전체에 대해 검색은 할 수 있습니다.
:g/^h/:norm I#

하지만 현재행부터 6번행처럼 특정 range를 지정하고 싶은 데 어떻게 하는 지 모르겠습니다.

시도해본 것은
:.,6/^h/:norm I#
였는데 원하는 바는 아니네요.

분명 방법이 있을 것 같은데, 못찾고 있습니다. 도움 부탁 드립니다.

chanik의 이미지

원하시는 바를 문자 그대로 처리하려면 아래와 같이 하면 되겠고,

:.,6g/^h/s/^/#/

그냥 아래와 같이 해도 되겠네요

:.,6s/^h/#&/
작성자의 이미지

감사합니다.
[range]g 가 제가 원하던 바였군요.

그런데 혹시 두번째 예에서 '&'가 무엇을 뜻하는지 알 수 있을까요?

작성자의 이미지

&는 매치됐던 문자겠군요.

감사합니다.