시각적 모드에서 Vim 대체

시각적 모드에서 Vim 대체

이와 같은 테스트 블록에서는

cron.allow
cron.deny

cron 대신 at을 사용하고 싶습니다. 시각적 모드(ctrl+v)로 선택한 범위 내에서만 ctrl+v를 누르면 ! 프롬프트 "Okay, I do"가 나타납니다.

sed s:cron:at:gc

하지만 이 오류만 표시됩니다.

:'<,'>! sed s:cron:at:gc
shell end return code 1
7 lines filteerd

그리고 돌아온 후의 결과

sed: expression -e #1, caracther 12: option `s' unknown

왜?

답변1

visual block라인 선택 모드 에 있으면 다음을 시도해 보십시오.

:'<,'>s/cron/at/g

Vim에는 외부 명령을 호출할 필요가 없는 찾기 및 바꾸기 기능이 있습니다.

답변2

명령줄에서 성공을 관찰합니다.

$ echo cron | sed s:cron:at:
at

하지만 그렇지 않습니다:

$ echo cron | sed s:cron:at:c
sed: -e expression #1, char 11: unknown option to `s'

c옵션 이 아닙니다 sed. 그러나 다음은 작동합니다.

:'<,'>! sed s:cron:at:g

하지만 물론 sedvim에서는 그렇게 간단한 교체를 수행할 필요가 없습니다. 또한 원하는 경우 c(확인) vim의 내장 대체 명령을 사용하십시오.

:'<,'>s/cron/at/gc

답변3

sed나 대안을 전혀 사용할 필요가 없는 것 같습니다. 변경( c) 명령을 사용하면 됩니다. 문서에서:

Visual-block change                       *v_b_c*
All selected text in the block will be replaced by the same text string.  When
using "c" the selected text is deleted and Insert mode started.  You can then
enter text (without a line break).  When you hit <Esc>, the same string is
inserted in all previously selected lines.

여기서 핵심은,"을 클릭하면 <Esc>이전에 선택한 모든 행에 동일한 문자열이 삽입됩니다."따라서 여러분이 해야 할 일은 텍스트를 선택하고 cron, 키를 누르고 , 입력하고, 삽입 모드를 종료하는 것뿐입니다. 그러면 c블록의 at각 항목을 로 바꾸는 원하는 결과를 얻을 수 있습니다.cronat

블록에 대해 바꾸기 명령을 실행하려면 블록을 잘라내어 빈 줄에 붙여넣고 해당 줄에 대해 바꾸기를 실행한 다음 결과 블록을 잘라내어 원래 위치에 다시 붙여넣습니다.

귀하의 질문에 있는 명령의 문제점은 외부를 사용하려고 하는데 명령이 플래그를 허용하지 않는다는 것입니다 sed.ssedc

관련 정보