한 번에 여러 탭을 열려면 어떻게해야합니까?


14

내가 사용하는 경우 :

:tabedit file1 file2

나는 얻다:

E172: Only one file name allowed

:tabedit여러 파일 이름 으로 사용할 수있는 방법이 있습니까? 아니면 한 번에 여러 탭을 여는 또 다른 방법은 무엇입니까?



@kenorb 예. 그리고 그것은 그것이 무엇인지에 대한 설명이없는 것을 제외하고는 이미 여기에 정확히 같은 대답을 가지고 있습니다. 그렇다면 어떻게 연결하면 어떤 가치가 추가됩니까?
Martin Tournoij

다른 답변이 있으며 새로운 답변이 올 수 있습니다. 둘째, 비슷한 링크 / 관련 항목이 거의 없으므로 사용자는 관련 정보를 통해 한 번 더 배울 수 있습니다.
kenorb 2019

이 한 줄짜리를 배웠습니다 :args *.c | tab all. 다른 질문은 이것보다 인기가 많으므로 연결하는 것도 좋습니다.
kenorb 2019

관련 : 스택 오버플로에서 VIM 을 사용 하여 새 탭에서 여러 파일을 엽니 다 .
Mihai Capotă

답변:


10

인수 목록을 수정하여 "내장"방식을 사용하는 다른 대답 의 문제와 복잡성을 감안할 때 , 나는 이것을 수행하기 위해 작은 기능을 추가했습니다.

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

이제 사용할 수 있습니다 :Tabedit *.vim. 이 기능은 모든 글 로빙 패턴을 확장하고 모든 :tabedit <f>파일에 대해 실행 됩니다. 원하는만큼 경로 이름을 추가 할 수 있습니다. 예를 들면 다음과 같습니다.

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

글쎄, 등등 ...

나는 조금에 넣고 globedit.vim의 도에 대한 명령이 포함 된 플러그인, :Edit, :Split, 등


2
훌륭한 기능과 명령! 일부 개선 사항 : (1) [<f-args>]대신 사용 "<args>"-그 방법으로 pattern매개 변수는 List (배열)이며 문자열을 수동으로 나눌 필요가 없습니다. (2) glob()List를 리턴하도록 세 번째 인수로 0이 아닌 값을 전달하십시오 . 그러면 수동 분할도 피할 수 있습니다. 0동작에 영향을주지 않고 건너 뛰려면 두 번째 인수 로 전달해야합니다 glob(l:p, 0, 1).
tommcdo

7

내가 아는 한, 이것을 수행하는 유일한 내장 방법은 다음과 같습니다.

:args *.vim
:tab all

먼저 :args인수 목록을 대체합니다. 인수 목록에는 Vim을 연 파일이 나열됩니다. 그래서 vim file1 file2인수 목록에 포함 된 의미 file1file2.
런타임에이를 수정할 수 있으며 Vim은 인수 목록의 모든 새 항목에 대한 버퍼를 엽니 다.
자세한 내용 :help argument-list은 참조하십시오.

:all명령은 인수 목록의 모든 항목에 대한 창이 열립니다 :tab명령이 명령을 실행, 그리고 명령이 새 창을 열 것입니다 주어진 새 탭을 엽니 다.

경고

이 방법에는 몇 가지주의 사항이 있습니다.

우선, 중복 검사가 없으므로 동일한 버퍼에 대해 둘 이상의 탭으로 끝날 수 있습니다.

그러나 가장 큰 문제는 모든 탭을 인수 목록에있는 것으로 대체한다는 것입니다. 그래서 당신은 손실 기존의 모든 탭을. 인수 목록을 바꾸지 않고 인수 로 추가
하여이를 약간 우회 할 수 있습니다 . 하지만 같은 명령 또는 않습니다 되지 인수 목록을 변경, 당신은 인수 목록에 추가하지 않는 한 당신은 (당신은 여전히하지만, 버퍼 목록에있는) 그 탭을 잃게됩니다. 인수 목록의 모든 항목을 탭에서 열지 않을 수도 있습니다. 추가 탭으로 두 파일을 열면됩니다.:argadd *.vim:edit:tabedit

현재 열려있는 모든 탭을 인수 목록에 추가하여 (실제로는 작동 할 수는 없음) 먼저 추가 하여이 작업을 약간 개선 할 수는 있지만 여전히 완벽하지는 않습니다. 탭에 둘 이상의 창이 있으면 여전히 수정됩니다 ...


틀릴 수도 있지만 탭을 여는 방법에 대한 질문에서 볼 수 있듯이 추가 탭이 열리지 않습니까?
muru

1
그 질문에 대한 나의 대답을 언급한다면, 내가 사용한 차이점은 :argdo tabedit %각 인수에 대해 새로운 탭을 엽니 다. 하나의 탭으로 시작하고 n 개의 새로운 탭을 열면 자연스럽게 n + 1 탭이 남습니다 . :tab all훨씬 더 나은 솔루션입니다.
tommcdo 2019

@tommcdo 나는 Josh Petrie의 대답 에 대해 이야기하고있었습니다 . 당신은 그의 별명 중 하나에 일어나지 않을 것입니까? :)
muru

하하. 나는 다른 질문을 생각하고 있었을 것입니다!
tommcdo

2

:next예를 들어 다음과 같이 명령 을 사용할 수 있습니다 .

:n file1 file2

또는:

:n *.txt

이것은 :args *.vim? 를 사용하는 것과 같습니다 . 적어도, 그것은 똑같이 행동하고 그것을 똑같이 :help next_f문서화합니다.
Martin Tournoij

더 짧고 간단하며 언급하지 않았습니다. 당신이 그것에 대한 질문에서 요청한 것과 같은 동작입니다.
kenorb

2

명령 행에서 다음을 사용할 수 있습니다.

vim file1 ... filen -p

그리고 -p아직도 사용하는 것을 잊었다면

:tab ball

Btw, 변수 tabpagemax(기본값 10)는이 방법으로 열 수있는 탭 수를 제한 한다는 것을 잊지 마십시오 .


0

실제로 새 기능을 작성하지 않고도 새 탭을 열고 현재 탭을 유지할 수 있습니다 ( 스택 오버플로 에서이 답변 참조 ).

:args file1 file2 | argdo tabe

:tabe첫 번째 파일이 현재 탭에서 열리기 전에 빈 탭 ( )을 새로 열 수 있습니다 . 또한 여분의 빈 탭이 열린 채로 있습니다 ( :help argdo이유 이해하기 참조 ).


또한 링크에 설명 된대로 구문 강조 표시 (어떤 이유로 든)를 수정하고 마지막 탭을 닫으려면 'full'명령이 다음과 같습니다 :tabnew | args file1 file2 | argdo tabe | tabdo syntax on. 프롬프트를 지우려면 Enter 키를 누르고 :close마지막을 제거하려면 입력 해야합니다 ( empty) 탭 ... 많은 타이핑이 가능하며 많은 탭을 열 경우에만 가치가 있습니다 (2 또는 3 파일의 경우 :tabe두 번 사용하는 것이 더 빠릅니다).
Martin Tournoij
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.