다음과 같은 예제 줄을 포함하는 초기 파일의 경우:
1
12
123
1234
12345
원하는 파일 상태는 다음과 같습니다.
'1'
'12'
'123'
'1234'
'12345'
:%s/^/'/g
저는 이 작업을 수행하기 위해 두 개의 명령을 사용해 왔으며 :%s/$/'/g
그중 하나를 사용하고 싶습니다. 그러나 내가 시도할 때
:%s/[$^]/'/g
오류가 발생했습니다.
E486: Pattern not found: [$^]
나는 괄호 안에 넣는 것이 ^
제외를 의미한다는 것을 알고 있으므로 앞에 넣는 것은 줄의 시작과 끝을 일치시키는 것을 의미한다고 생각했는데 $
분명히 그런 일은 일어나지 않습니다.
vim에서 줄의 시작과 끝을 일치시키는 방법은 무엇입니까?
답변1
어때요?
:%s/.*/'&'/
"0개 이상의 문자를 작은따옴표 앞과 뒤의 문자로 바꿉니다."
답변2
^
그리고 $
이러한 의미(줄의 시작 또는 끝)를 유지하지 마십시오 [ ]
. 문자 세트를 선택하는 데 사용됩니다. 내부적으로 [ ]
대부분의 정규식 연산자는 의미를 잃습니다(일부 문자는 특별한 의미를 얻거나 다른 의미를 얻습니다). 선두는 그룹이 부정됨을 ^
의미하며 모든 것과 일치합니다.[]
와는 별개로이 캐릭터들. 따라서 를 [^$]
제외한 모든 문자와 일치할 수 있습니다 $
. (및 문자 [$^]
만 일치합니다 .)$
^
매치를 시작하고 싶다면또는줄 끝, 을 사용 하세요 /^\|$/
.|
또는(Vim의 기본 정규식 모드에서 이스케이프해야 합니다).
그래서:
:%s/^\|$/'/g
이는 와 가 두 개의 개별 일치 항목이고 기본적으로 한 줄의 첫 번째 일치 항목에만 작동하기 g
때문에 필요합니다 .^
$
s
답변3
전체를 탐욕스럽게 일치시킬 수 있다면 실제로 줄의 시작과 끝을 일치시킬 필요가 없습니다.
:%s/\(.*\)/'\1'/
알아야 할 가장 중요한 점은 대괄호를 이스케이프 처리하여 "캡처 그룹"을 생성한 다음 \1
캡처된 콘텐츠를 참조하는 데 사용하는 것입니다.
답변4
norm[al]
명령과 A
연결된 컨트롤, 사전 제어를 사용하여 기본적으로 명령 뒤에 문서의 다른 명령이 올 수 없기 때문에 명령이 앞에 추가된 두 번째 "사양"을 실행하도록 I
합니다 .:exe[cute]
:norm[al]
:help :normal
따라서 명령은 다음과 같습니다.
:exe "%norm A'" |%norm I'
여기에서는 모든 행 에 %
대해 변경이 수행됩니다.