정규식 일치에 일반 모드 명령 적용


10

Clojure 함수 정의 아래의 문서 문자열과 일치시키기 위해 다음 정규식을 사용하고 있습니다.

\vdefn.*\n\s*\zs"([^"]|\n)*"

gq주어진 파일에서이 패턴의 모든 일치 항목에 대해 일반 모드 (형식 줄) 명령 을 실행하는 방법 이 있습니까?

답변:


10

의 힘 g:

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

/s 사이의 부분은 원래의 질문에서 나온 정규식이므로 상당히 설명이 필요합니다.

normal gngq결국 다소 흥미 롭습니다. gn는 정규 표현식의 다음 일치를 선택하고 gq물론 질문에서 언급 한대로이 선택의 형식을 지정합니다.

:g정말 큰 부분입니다. 제 생각에 이것은 Vim의 가장 유용한 기능 중 하나입니다. g전직 명령은 정규식과 전직 명령을 소요하고 모든 행에 정규식 일치 명령을 실행합니다. :g이미 배우지 않았다면 생산성이 크게 향상되므로 권장합니다. 몇 가지 리소스는 Vim 자체 :help :g또는 Vim 위키 의 g의 힘입니다 .


gn조각 라인으로부터 선택되고 V받는 트리거 다음 패턴의 발생 (동일한 행에없는 것). Vim의 문서에 따르면 비주얼 모드가 활성화되어 있으면 현재 줄에서 다음 패턴까지 선택이 확장됩니다. 이로 인해 원치 않는 동작이 발생합니다.

@merb Whoops, 그것을 몰랐다. 편집했습니다.
Doorknob

선택은 여전히 ​​일치하는 줄에서 다음 일치까지입니다. 일반 모드 명령을 단계별로 //s<cr>실행하면 현재 줄에서 경기가 시작될 때 //e<cr>나를 떠나지 만 현재 경기가 아니라 다음 경기가 끝날 때 떠나게됩니다.

1
에 문제가있는 것 같습니다 //s<cr>V. 내가 실행하면 :normal V예상대로 비주얼 라인 모드로 이동합니다. 내가 실행할 때 예상대로 :normal //s<cr>커서 "가 일치 하는 첫 번째 에 도달합니다. 내가 실행할 때 :normal //s<cr>V나는 시각적 인 선택을하지 않습니다.

1
해결했습니다. 명령은이어야 normal gngq합니다. 수정 제안.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.