현재 줄 번호로 패턴 교체 변화 x x x 에 1 2 3 지금은 Perl 원 라이너를

이 파일의 ‘x’를 현재 줄 번호로 바꾸고 싶습니다. 즉, 변화

x
x
x

1
2
3

지금은 Perl 원 라이너를 사용합니다.

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

UltraEdit은 수직 선택 및 교체로 할 수 있다고 생각합니다. 이것은 vim에서 할 수 있습니까? (이 예제에서는 ‘x’가 한 줄에 있다고 가정하지만 실제 파일의 줄은 훨씬 복잡합니다.)



답변

예, vim이 할 수 있습니다! 에 대한 전역 검색을 수행 x하고로 바꿉니다 \=printf("%d", line('.'). 예를 들면 다음과 같습니다.

:%s/x/\=printf("%d", line('.'))

x필요한 경우 다른 검색으로 변경할 수도 있습니다 .

설명:

이것은 모든 발생 x(또는 검색 한 것)을 평가 레지스터로 대체합니다 \=. 이 레지스터는 vimscript 코드를 평가하고 문자열을 반환합니다. 이 경우 평가되는 코드는 “우리가있는 줄을 10 진수로 인쇄합니다”입니다


답변

수직 선택 및 교체에 대해 언급 했으므로 그렇게 할 수도 있습니다. 사용은 CtrlV당신이 다음 교체하려는 텍스트의 잠금을 선택해야 할 일 c과 0으로 그것을 대체하기 위해, 0을 입력합니다. 그런 다음 해당 0을 선택하십시오.

그런 다음 g<c-a>( g+ Ctrla)를 누릅니다 .

단일 열을 교체 한 gv경우 동일한 영역을 빠르게 다시 선택할 수 있습니다 .