Vim에서 줄 중간에 텍스트를 여러 줄에 추가하려면 어떻게해야합니까?
10 줄이 있는데 그 줄에 나오는 단어 앞에 텍스트를 추가하고 싶다고 가정 해 보겠습니다. 줄의 시작 부분에있을 필요는 없습니다.
에서:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
에:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
그것은뿐만 아니라 앞에 추가 할 수도 bar(
실제로 서라운드 만 foo
에 bar(foo)
?
또한 //
여러 줄에 주석을 추가하는 빠른 방법 (C 스타일 주석)을 원합니다 .
저는 Vim / GVim 7.2를 사용합니다.
첫 번째로 이동하여 - 를 foo
눌러 시각적 차단 모드로 전환하고가있는 모든 줄 이 표시 될 때까지 아래로 누릅니다 . 그런 다음 - 를 눌러 블록의 시작 부분에 삽입합니다. 완료하고를 누르면 삽입 된 문자가 표시된 블록 왼쪽의 각 줄에 추가됩니다.Ctrlvfoo
ShiftiEsc
또, 마지막에 눌러 삽입하려면 Ctrl- v영향을받는 모든 라인을 표시하고 다음을 눌러 아래로 / 위로 이동 End또는 $라인이 끝날 때까지 선택 영역을 확장 할 수 있습니다. 지금 당신은 누를 수 Shift- a처럼 이전에, 모든 라인의 끝에 추가 할 Shift- i.
시각적 선택은 일반 이동 명령으로도 수행 할 수 있습니다. 그래서 당신은 여는 중괄호와 종류에 움직일 수 C의 전체 블록을 언급하는 Ctrl- v % Shift- i // Esc.
첫 번째 질문에 답하려면 아래
:%s/foo/bar(&)/g
를 찾아서 foo
일치하는 패턴을 bar()
. 이 /g
작업을 한 줄에 여러 번 수행합니다.
당신은 단지 매칭이기 때문에 foo
, 당신은 간단한 :s/foo/bar(foo)/g
. 그러나 위의 방법은 단순한 단어 (예 :)가 아닌 정규 표현식에서 일치 시키기로 결정한 경우 작동 f[a-z][a-z]
합니다. 위의 '&'는 일치하는 항목을 나타냅니다.
선 집합을 접두사로 지정하려면 두 가지 다른 접근 방식 중 하나를 사용합니다.
한 가지 접근 방식은 블록 선택 (sth에서 언급)입니다. 일반적으로 ctrl-V커서 이동 이 뒤 따르는 직사각형 영역을 선택할 수 있습니다 . 사각형을 강조 표시 한 후을 누르면 사각형 shift-I의 왼쪽에 문자가 삽입되거나 사각형 shift-A의 오른쪽에 추가됩니다. 따라서이 기술을 사용하여 접두사 shift-I를 입력하고를 누르고 접두사를 입력 한 다음 이스케이프 를 누를 줄의 가장 왼쪽 열을 포함하는 사각형을 만들 수 있습니다 .
다른 방법은 (Brian Agnew가 언급 한대로) 대체를 사용하는 것입니다. Brian의 대체는 전체 파일에 영향을줍니다 (명령에서 %는 "모든 행"을 의미 함). 몇 줄에만 영향을 미치려면 가장 쉬운 방법은 shift-V첫 번째 / 마지막 줄에있는 동안 (시각적 라인 모드를 활성화 하는) 치고 마지막 / 첫 번째 줄로 이동하는 것입니다. 그런 다음 다음을 입력하십시오.
:s/^/YOUR PREFIX/
^는 정규식입니다 (이 경우 줄의 시작 부분). 시각적 선 모드에서 입력하면 s 앞에 자동으로 '<,'>가 삽입 된 것을 볼 수 있습니다. 이것은 대체 범위가 시각적 선택이됨을 의미합니다.
추가 팁 : 접두사에 슬래시가 포함 된 경우 백 슬래시로 이스케이프하거나 다른 구두점 문자를 명령의 구분 기호로 사용할 수 있습니다. 예를 들어 C ++ 줄 주석을 추가하려면 일반적으로 다음과 같이 작성합니다.
:s:^:// :
접미사를 추가하는 경우 모든 행이 정확히 같은 길이가 아니면 대체 방법이 일반적으로 더 쉽습니다. ^ 대신 패턴에 $를 사용하면 문자열이 앞에 추가되는 대신 추가됩니다.
접두사와 접미사를 동시에 추가하려면 다음과 같이 할 수 있습니다.
:s/.*/PREFIX & SUFFIX/
. *는 전체 행과 일치합니다. 대체의 &는 일치하는 텍스트 (전체 줄)를 다시 넣지 만 이제 접두사와 접미사가 추가됩니다.
BTW : 코드를 주석 처리 할 때 나중에 주석을 제거하고 싶을 것입니다. 시각적 블록 ( ctrl-V)을 사용하여 슬래시를 선택한 다음 d를 눌러 삭제하거나 대체 (아마도로 만든 시각적 선 선택 shift-V)를 사용하여 다음과 같이 선행 슬래시를 제거 할 수 있습니다.
:s:// ::
: 정상 구조!
:%norm Wibar(
:%norm WEa)
: norm (al)은 명령을 입력 한 것처럼 재생합니다.
W - goes to the next word
i - starts insertion mode
bar( - types the sequence 'bar('
Or in one line:
:%norm Wibar(
ctrlvESCEa)
If you're running Windows then type ctrlq instead of ctrlv.
Yet another possibility (probably not-so-useful in your test case, but handy in other situations) is to cordon off the area you want to change with marks.
- Put the cursor anywhere in the top line and press 'a
- Put the cursor anywhere in the last line and press 'b
- Issue the command
:'a,'b s/foo/bar(&)/
I usually like visual block mode if everything is visible on the screen, and I usually prefer marks if the start and stop are separated by many screens.
Another simple regular expression is:
%s/^/<text you want to prepend>/
For the C-style comments, use the regexp answer by Brian, and match on line ending $
, and insert away.
'development' 카테고리의 다른 글
Xcode 7 및 ENABLE_BITCODE = YES 설정이 작동하지 않습니다. (0) | 2020.09.04 |
---|---|
Flutter에서 애플리케이션 런처 아이콘을 변경하는 방법은 무엇입니까? (0) | 2020.09.04 |
파이썬에서 파일 찾기 (0) | 2020.09.04 |
array_filter () 후 0부터 숫자 순서대로 키를 재설정하려면 어떻게해야합니까? (0) | 2020.09.04 |
bash 스크립트가 대화 형 프롬프트에 응답하도록합니다. (0) | 2020.09.04 |