와일드 카드 식과 일치하는 여러 파일을 여는 방법은 무엇입니까?


10

glob 표현식과 일치하는 여러 파일을 편집하고 싶습니다. 예를 들어 자식 디렉토리의 모든 자식 구성 파일을 편집하려면 셸 에서이 작업을 수행 할 수 있습니다.

vim */.git/config

Vim :명령 줄에서 :find */.git/config비슷한 작업을 수행해야합니다 (예 : glob 표현식과 일치하는 모든 파일 열기). 그러나 대신 불평 E77: Too many file names합니다.

와일드 카드 / 글로브 표현식과 일치하는 여러 파일을 여는 Vim 명령 또는 하나의 라이너가 있습니까 (함수 작성과 관련이 없음)?

답변:


8

사용할 수 있습니다 :args {glob}. 당신의 글로브에서 **디렉토리를 재귀 적으로 탐색합니다.

이것은 인수 목록을 채 웁니다. 이는 하나 이상의 파일 이름을 인수로 사용하여 Vim을 시작할 때 채워지는 것과 동일한 목록입니다.

당신의 인수 목록이 채워지면, 당신은 그것을 사용하여 탐색 할 수 있습니다 :next:previous. :first:last명령 을 사용하여 첫 번째 항목과 마지막 항목으로 이동할 수도 있습니다 .


1
Nice :)는 :args */.git/config실제로 버퍼 목록도 채우므로 :bnext작동합니다. 이상하게 보입니까? (Vim 7.4.52 및 Neovim)
Justin M. Keyes

1
github.com/tpope/vim-unimpaired 가 설치된 경우 다른 사람에게 알리는 목록을 ]a순환시킵니다 . :args
Justin M. Keyes

또한 :argadd file*할 수 있습니다.
kenorb

glob 패턴 ( **) 을 사용하려면 다음 을 globstar설정 해야합니다 . 셸 globbing을 사용하여 중첩 된 모든 디렉토리의 모든 파일 일치를 참조하십시오 .
kenorb

@ JustinM.Keyes 버퍼 목록은 args 목록의 상위 집합이므로 예상됩니다.
jamessan

3

별도의 탭에서 일치하는 파일을 열려면…

:n */.git/config | tab all

설명 : :n ( :next)는 다음 파일 목록을 모든 일치 항목으로 설정합니다. tab all다음 파일 목록의 모든 파일을 새 탭에서 엽니 다.

… 또는…

for f in glob("*.py", 0, 1) | exe "tabe" f | endfor

설명 : 에서가 glob(…), 0 수단을 포함하는 모든 이들이 그렇지 않으면 때문에 무시 될 경우에도 일치하는 파일을suffixes 또는 wildignorecase설정. 1은 문자열 대신 목록을 반환한다는 의미입니다. exe "tabe" f는 짧은 형식이며 execute "tabedit" f변수 f로 지정된 파일을 새 탭에서 여는 수단 입니다.


1
:n */.git/config | buffer작품 처럼 보입니다 .
Mateen Ulhaq

2

Vim : 명령 줄에서 :find */.git/config비슷한 작업을 수행해야합니다 (예 : glob 표현식과 일치하는 모든 파일 열기). 그러나 대신 불평 E77: Too many file names합니다.

설명서를 읽기 전에 아무 것도 기대하지 마십시오.

Tom의 답변 외에도을 :next대신하여 직접 사용할 수 있습니다 :args.


0

파일을 여는 것은 vim */.git/config확실히 작동합니다. 그렇지 않은 경우 Vim을 7.4로 업그레이드해야합니다 (이전 버전은 더 버그가 많았습니다).

또는 편집기 내에서 다음 중 하나를 시도하십시오.

:n `find .git/ -name config`
:args `find . -name config`

당신은 내 질문을주의 깊게 읽지 않았습니다. 그리고 받아 들인 대답은 이미 언급했습니다 :args.
Justin M. Keyes

@ JustinM.Keyes 포인트 주셔서 감사합니다. 와일드 카드는 기본적으로 작동해야하며 이는 업그레이드 전에 정확히 동일한 오류가 발생했기 때문에 7.4에서 작동해야한다는 유일한 답변입니다. 사용 args은 해결 방법 일 뿐이지 만, 더 많은 사용자 가이find 같은을 사용하여 더 복잡한 솔루션에 사용하려는 경우 vim 자체에서 쉘 확장을 사용하는 방법을 보여줍니다 . 따라서 귀하의 질문에 추가 가치를 부여한다고 생각합니다. 그래서 당신과 함께 잘되기를 바랍니다.
kenorb

나는 결코 문제가 없었으며 vim */fooVim 버전과 관련이있는 방법은 없습니다 . 기능 이기 때문입니다 .
Justin M. Keyes

0

명백하지만 위에 나열되어 있지 않음-예는 이름에 create_table 문자열이있는 모든 SQL 파일을 찾습니다.

:args **/*create_table*sql

그들을 확인

:ls

첫 번째를 열고

:b 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.