문제

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 그리고 세 번째 열만 검색해야합니다 ....

이것을 열 번호를 가져 오는 명령으로 바꿀 수 있다고 확신하지만 지금은 꺼져 있습니다. 미안합니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top