문제
Vim(또는 플러그인)에 용어를 검색하고 검색 결과를 반복하는 방법이 있습니까? n
Vim에서는 행이 아닌 열로?따라서 내 파일이 다음과 같다면:
foo1 bar bar
baz baz foo3
baz baz foo4
foo2 bar bar
내가 검색하면 foo
1,2,3,4 순서로 결과를 반복하고 싶습니다.보통 n
1,3,4,2 순서로 진행하겠습니다.
예를 들어 열이 필드를 나타내는 거대한 고정 너비 데이터 파일 또는 CSV 파일의 검색 결과를 탐색하기를 원합니다.
(대신 Emacs에서 수행할 수 있는 방법도 모색하겠습니다.:)
해결책
이 질문을 본 후 나는 이를 처리하기 위해 vim 플러그인을 작성하기로 결정했습니다.내 첫 번째 vim 플러그인이므로 아마도 매우 나쁠 것입니다.그러나 귀하가 제시한 예에서는 작동합니다.
vim.org에서 플러그인을 다운로드할 수 있습니다. SearchCols.vim
또한 동일한 사이트의 multvals 플러그인이 필요합니다. multivals.vim
명령을 생성합니다. :SearchCols <string>
, 검색하는 데 사용할 수 있습니다. <string>
고정 너비 열에서 검색 시 첫 번째 열을 먼저 찾은 다음 두 번째 열을 찾습니다.vim의 표준인 행별 검색이 아닙니다.다음을 통해 명령을 반복하십시오. @:
그런 다음 @@
콜론 명령이기 때문입니다.
가정:
- 파일이 공백으로 구분된 고정 너비 열로 형식화되어 있다고 가정합니다.데이터 항목 내부에는 공백이 없으며 그 사이에만 공백이 있습니다.
- 파일의 첫 번째 줄은 열 너비를 추론할 수 있도록 형식이 지정되어 있다고 가정합니다.
제가 생각할 수 있는 명백한 개선 사항은 를 사용하는 것보다 다음 항목을 더 쉽게 검색할 수 있도록 하는 것입니다. @:
그리고 @@
, 검색 강조 표시 포함(코드가 있지만 다음을 사용하기 때문에 주석 처리됨) :match
그리고 당신은 사용해야 할 것입니다 :match none
끄려면), multvals.vim에 대한 종속성을 제거합니다.
다른 팁
편집 : 방금 테이블에 VIM 정규 표현식 사용에 대한 개요를 찾았습니다. 여기. 그것은 내 아마추어 시도보다 훨씬 깨끗합니다 (이것은 효과적이지만) :) :
검색 ^foo
검색하는 동안 첫 번째 열을 검색합니다 .*\ foo
두 번째 열을 검색하고 .*\ .*\ foo
세 번째를 검색합니다.
이것은 라인의 시작과 전체 블록과 일치하기 때문에 물론 완전하지 않으므로 foo3 및 foo4를 찾을 수 있지만 커서를 위치 0에 넣습니다.
그러나 기록 기능으로이를 자동화 할 수 있습니다. 정상 모드로 다음을 정확하게 입력하십시오.
qa/.*\ .*\ foo
/foo
q
(새로운 라인을 사용하여 반환 키를 누르야한다는 것을 나타냅니다).
이렇게하면 A 레지스터 아래에 두 개의 검색이 있습니다 (QA는 A, QB 아래 B 등에 기록을 시작합니다). 이제 쳤다 @a
그리고 세 번째 열만 검색해야합니다 ....
이것을 열 번호를 가져 오는 명령으로 바꿀 수 있다고 확신하지만 지금은 꺼져 있습니다. 미안합니다 :)