vim 검색 모드에서 for 루프 반복자 변수를 사용하여 일련의 단어가 파일에 나타나는 횟수를 확인하려고 합니다. 지금까지 내가 한 일은 다음과 같습니다.
for i in range(1,40) | %s/SiTg//gn | endfor
i
%s/S\iTg//gn
for 루프로 묶인 패턴에서 반복자 변수를 검색해야 합니다 . vim에서 어떻게 이를 달성할 수 있나요?
답변1
Vimscript는 명령줄에 입력한 Ex 명령과 똑같이 평가합니다 :
. 에는 변수가 없으므로 ex
지정할 수 없습니다. 대화형으로 명령을 입력할 때 이를 사용하여 <C-R>=
변수 내용을 삽입할 수 있습니다.
:sleep <C-R>=timetowait<CR>m<CR>
...하지만 스크립트에서는 :execute
사용해야 합니다. Ex 명령의 모든 리터럴 부분은 따옴표(작은따옴표 또는 큰따옴표)로 묶은 다음 변수와 연결해야 합니다.
execute 'sleep' timetowait . 'm'
i
귀하의 예에서는 다음 명령에 변수를 넣고 싶습니다 :%s
.
for i in range(1,40) | execute '%s/S' . i . 'Tg//gn' | endfor
답변2
다른 목적으로 루프를 사용 하지 않는 경우 for
언제든지 정규식을 확장하여 전체 숫자 범위를 포괄할 수 있습니다.
:%s/S\([1-4]0\|[1-3]*[1-9]\)Tg//gn
답변3
다음과 같은 수정자를 사용할 수 있습니다 \=<subexpression>
. ← 이는 모든 문자 앞에 s 값을 :s/a/\=g:integer."a"/g
추가합니다 .a
g:integer