문제

Vim에서 탭을 사용하는 기능을 살펴보았습니다. :tabe, :tabnew, 등)은 숨겨진 버퍼의 동일한 창에 많은 파일을 열어 두는 현재 관행을 대체합니다.

나는 열려 있는 모든 개별 파일을 항상 자체 탭에 두고 싶습니다.그러나 이를 방해하는 몇 가지 사항이 있습니다.이 문제를 어떻게 해결합니까?

  1. 다음과 같은 명령이 있을 때 gf 그리고 ^] 다른 파일의 위치로 이동하면 해당 파일은 현재 탭의 새 버퍼에서 열립니다.이러한 모든 종류의 명령을 사용하여 파일을 새 탭에서 열거나 파일이 이미 열려 있는 경우 파일이 있는 기존 탭으로 전환할 수 있는 방법이 있습니까?

  2. 버퍼를 전환할 때 사용할 수 있습니다.:b <part of filename><tab>기존 버퍼에 있는 파일 이름을 완성합니다. <part of filename> 파일 이름의 시작 부분이 아닌 중간에 올 수도 있습니다.탭 전환에 해당하는 기능이 있습니까?

도움이 되었습니까?

해결책

멈춰, 멈춰, 멈춰.

이것은 Vim의 탭을 사용하도록 설계된 방식이 아닙니다.사실, 이름이 잘못되었습니다.더 나은 이름은 "뷰포트" 또는 "레이아웃"입니다. 탭이 바로 창의 다른 레이아웃이기 때문입니다. 모두 기존 버퍼 중

Vim을 탭 1개 == 버퍼 1개로 이기기 위해 노력하는 것은 헛된 일입니다.Vim은 이를 모르거나 신경쓰지 않으며 모든 명령, 특히 Quickfix 버퍼(:make, :grep, 그리고 :helpgrep 마음속에 떠오르는 것들)은 기꺼이 탭을 무시할 것이며 이를 막기 위해 할 수 있는 일은 아무것도 없습니다.

대신에:

  • :set hidden
    이 세트가 아직 없다면 그렇게 하세요.이는 vim을 지구상의 다른 모든 다중 파일 편집기처럼 작동하게 만듭니다.창 어딘가에 표시되지 않는 편집된 버퍼가 있을 수 있습니다.
  • 사용 :bn, :bp, :b #, :b name, 그리고 ctrl-6 버퍼 간을 전환합니다.좋아요 ctrl-6 나 자신(혼자서 이전에 사용된 버퍼로 전환하거나 #ctrl-6 버퍼 번호로 전환 #).
  • 사용 :ls 버퍼를 나열하거나 다음과 같은 플러그인을 사용합니다. MiniBufExpl 또는 Buf탐색기.

다른 팁

파티에 조금 늦었지만 이 목록에 다음 항목이 표시되지 않아 놀랐습니다.

:tab sball - 열려 있는 각 버퍼에 대해 새 탭이 열립니다.

:help switchbuf - 버퍼 전환 동작을 제어합니다. 시도해 보세요. :set switchbuf=usetab,newtab.이는 버퍼가 열려 있으면 기존 탭으로 전환하고, 그렇지 않으면 새 탭을 만드는 것을 의미합니다.

정력 :help window "탭 대 버퍼"의 혼란을 꽤 잘 설명합니다.

버퍼는 파일의 메모리 내 텍스트입니다.
창은 버퍼의 뷰포트입니다.
탭 페이지는 창의 모음입니다.

여러 파일을 여는 것은 vim에서 다음과 같이 이루어집니다. 버퍼.다른 편집기(예:notepad++) 이 작업은 탭을 사용하여 수행되므로 vim의 탭 이름이 오해의 소지가 있을 수 있습니다.

윈도우 작업 공간을 분할하여 여러 파일(버퍼)을 한 화면에 함께 표시하기 위한 것입니다.다른 편집기에서는 여러 GUI 창을 열고 데스크탑에서 다시 정렬하여 이를 수행할 수 있습니다.

마지막으로 이 비유에서 vim의 탭 페이지 여러 데스크탑에 해당합니다. 즉, 창을 다르게 재배치한 것입니다.

vim으로 help: tab-page 파일을 일시적으로 편집하고 싶지만 창과 버퍼의 현재 레이아웃에서는 아무것도 변경하고 싶지 않을 때 탭 페이지를 사용할 수 있다고 설명합니다.이러한 경우 특정 파일을 편집하기 위한 목적으로만 다른 탭 페이지를 사용할 수 있습니다.

물론 여러 탭 페이지나 창에 동일한 파일을 표시하면 동일한 작업 복사본(버퍼)이 표시된다는 점을 기억해야 합니다.

여기의 다른 답변과 달리 원하는 대로 탭을 사용할 수 있다고 말합니다.vim은 미리 정의된 매개변수에 따라 작업하도록 강요하기보다는 다용도 및 사용자 정의가 가능하도록 설계되었습니다.우리 모두는 프로그래머들이 우리의 "윤리"를 다른 사람들에게 강요하는 것을 좋아한다는 것을 알고 있으므로 이러한 성과는 확실히 주요 특징입니다.

<C-w>gf 버퍼와 동일한 탭입니다. gf 명령. <C-PageUp> 그리고 <C-PageDown> 탭 사이를 전환합니다.(Byobu에서는 이 두 명령이 전혀 작동하지 않지만 Byobu/tmux 외부에서는 작동합니다.대안은 gt 그리고 gT.) <C-w>T 현재 창을 새 탭 페이지로 이동합니다.

가능하면 중복 탭을 만드는 대신 vim이 기존 탭을 사용하도록 하려면 다음을 추가하세요. :set switchbuf=usetab .vimrc 파일에.당신은 추가할 수 있습니다 newtab 목록에 (:set switchbuf=usetab,newtab)을 사용하면 컴파일 오류를 표시하는 QuickFix 명령이 별도의 탭에서 열리도록 할 수 있습니다.나는 선호한다 split 대신 분할 창에서 컴파일 오류가 열립니다.

마우스 지원이 활성화된 경우 :set mouse=a, 탭을 클릭하여 탭과 상호 작용할 수 있습니다.또한 + 기본적으로 새 탭을 생성하는 버튼입니다.

탭에 대한 문서를 보려면 다음을 입력하십시오. :help tab-page 일반 모드에서.(그런 다음 다음을 사용하여 창을 탭으로 이동하는 연습을 할 수 있습니다. <C-w>T.) 긴 명령 목록이 있습니다.일부 창 명령은 탭과 관련이 있으므로 해당 문서도 다음을 통해 살펴보는 것이 좋습니다. :help windows.

덧셈:2013-12-19

별도의 탭에 각 파일이 포함된 vim의 여러 파일을 열려면 다음을 사용하세요. vim -p file1 file2 ....당신도 나와 같아서 항상 추가하는 것을 잊어버린다면 -p, vim은 일반적인 명령줄 옵션 구문 분석 규칙을 따르므로 끝에 추가할 수 있습니다.또는 bash 별칭 매핑을 추가할 수 있습니다. vim 에게 vim -p.

나는 같은 문제에 부딪쳤다.나는 탭이 버퍼처럼 작동하기를 원했지만 제대로 작동하지 못했습니다.제가 마침내 결정한 해결책은 버퍼가 탭처럼 동작하도록 만드는 것이었습니다!

라는 플러그인을 확인해보세요 미니 버퍼 탐색기, 일단 설치 및 구성되면 기능 손실 없이 탭과 거의 동일한 방식으로 버퍼를 사용하여 작업할 수 있습니다.

이것은 Vim에 익숙하지 않고 다른 텍스트 편집기(내 경우에는 Sublime Text)를 사용하는 사람들을 위한 답변입니다.

이 답변을 모두 읽었지만 여전히 명확하지 않았습니다.그것들을 충분히 읽으면 모든 것이 이해되기 시작하지만 질문 사이를 오가는 데 몇 시간이 걸렸습니다.

첫 번째는 다른 사람들이 설명했듯이 다음과 같습니다.

탭 페이지, 정말 비슷한 것 같아요 , 탭처럼 작동하고 대부분의 다른 GUI 편집기의 탭과 매우 유사해 보이지만 그렇지 않습니다.내 생각에 그것은 Vim에 기반을 둔 나쁜 정신적 모델인데, 불행하게도 탭 페이지 내에서 가질 수 있는 추가 기능을 흐리게 합니다.

내가 이해한 첫 번째 설명은 다음과 같습니다. @crenate의 답변 여러 데스크톱과 동일하다는 것입니다.그런 점에서 볼 때 데스크탑은 두 개만 열려 있지만 각 데스크탑에는 많은 GUI 창이 열려 있습니다.

다른 편집기/브라우저와 유사하다고 말하고 싶습니다.

  1. 탭 그룹화
  2. Sublime Text 작업 공간(예:프로젝트에 있는 열려 있는 파일 목록)

그런 것을 보면 파일 세트(버퍼)를 쉽게 그룹화할 수 있다는 점을 깨닫게 됩니다.CSS 파일, HTML 파일 및 JS 파일을 다른 탭 페이지에 있습니다.실제로 꽤 굉장합니다.

혼란스럽다고 생각되는 기타 설명

뷰포트

이것은 나에게 이해가 되지 않습니다.뷰포트에는 정의된 사전 용어, 저는 Vim 창에 대해 언급하는 것을 들었습니다. :help window 문서.뷰포트는 Sublime Text, Visual Studio, Atom, Notepad++와 같은 편집기와 관련하여 들어본 용어가 아닙니다.사실 저는 탭 페이지를 사용해보기 전까지 Vim에 대해 들어본 적이 없었습니다.

여러 데스크톱처럼 탭 페이지를 보는 경우 데스크톱을 단일 창으로 참조하는 것이 이상해 보입니다.

작업공간

아마도 이것이 더 의미가 있을 것입니다. 사전적 정의 이다:

임시로 사용하기 위한 메모리 저장 시설입니다.

따라서 버퍼 그룹을 저장하는 장소와 같습니다.

처음에는 그렇게 들리지 않았어 서브라임 텍스트의 개념 프로젝트에서 열려 있는 모든 파일의 목록인 작업공간:

열려 있는 파일 및 각 파일에 대한 수정 사항과 같은 사용자별 데이터가 포함된 숭고한 작업 공간 파일입니다.

그러나 좀 더 생각해 보면 이는 실제로 동의합니다.Vim 탭 페이지를 Sublime Text 프로젝트처럼 생각한다면 각 프로젝트에 하나의 파일만 열고 프로젝트 간에 계속 전환하는 것이 이상하게 보일 것입니다.따라서 탭 페이지를 사용하여 하나의 파일만 여는 것이 이상한 이유는 무엇입니까?

창 모음

그만큼 :help window 이런 식으로 탭 페이지를 참조합니다.게다가 수많은 다른 답변도 동일한 개념을 사용합니다.그러나 vim 창이 무엇인지 이해하기 전까지는 모래 위에 성을 짓는 것처럼 별로 쓸모가 없습니다.

위에서 언급했듯이 vim 창은 뷰포트와 동일하며 조용하고 훌륭하게 설명되어 있습니다. linux.com 기사:

Vim의 정말 유용한 기능은 하나 이상의 파일 간에 표시 가능한 영역을 분할하거나 창을 분할하여 동일한 파일의 두 비트를 더 쉽게 볼 수 있는 기능입니다.Vim 문서에서는 이를 뷰포트 또는 창으로 바꿔서 지칭합니다.

:help 항목을 사용하거나 F1 키를 눌러 Vim의 도움말 기능을 사용해 본 적이 있다면 이 기능에 이미 익숙할 것입니다.도움말을 입력하면 Vim은 뷰포트를 분할하고 상단 뷰포트에서 도움말 문서를 열고 문서는 하단 뷰포트에 열린 채로 둡니다.

탭 페이지를 버퍼 모음이 아닌 창 모음이라고 부르는 것이 이상하다고 생각합니다.하지만 두 개의 별도 탭 페이지가 각각 동일한 버퍼를 가리키는 여러 창으로 열 수 있다고 생각합니다. 적어도 지금까지 제가 이해한 바는 그렇습니다.

보기 : 도움말 탭은 VIM처럼 보이지 않습니다.

버퍼는 여러 탭에서 공유되므로 특정 탭에만 나타나도록 특정 버퍼를 잠그는 것은 불가능해 보입니다.

그래도 좋은 생각이에요.

다중 그놈 터미널과 같이 탭을 지원하는 터미널을 사용한 다음 각 터미널 탭에서 vim 인스턴스를 실행하면 원하는 효과를 얻을 수 있습니다.완벽하지는 않지만...

  • .vimrc에서 gf로 수행한 것처럼 일반적으로 버퍼를 조작하는 명령을 매핑하여 탭을 조작할 수 있습니다.

    map gf :tabe <cfile><CR>
    

    나는 당신도 똑같이 할 수 있다고 확신합니다 [^

  • 나는 vim이 (아직) 탭에 대해 이것을 지원하지 않는다고 생각합니다.gt와 gT를 사용하여 각각 다음 탭과 이전 탭으로 이동합니다.Ngt를 사용할 수도 있습니다. 여기서 N은 탭 번호입니다.한 가지 아쉬운 점은 기본적으로 탭 번호가 탭 줄에 표시되지 않는다는 것입니다.이 문제를 해결하기 위해 끝에 몇 가지 기능을 추가했습니다. 내 .vimrc 파일 (길고 형식이 올바르지 않기 때문에 여기에 붙여넣지 않았습니다.)

나는 탭과 같은 버퍼를 사용합니다. Buf탐색기 플러그인과 몇 가지 매크로:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

BufExplorer를 사용하면 상단에 탭 표시줄이 없지만 화면의 공간을 절약할 수 있고 무한한 수의 파일/버퍼를 열 수 있으며 버퍼 목록을 검색할 수 있습니다.

버퍼가 탭처럼 작동하도록 하려면 다음을 확인하세요. 탭라인 플러그인.

이는 단일 창을 사용하고 상단에 탭을 시뮬레이션하는 줄을 추가합니다(버퍼 목록만 표시함).이것은 오래 전에 탭이 GVim에서만 지원되고 명령줄 vim에서는 지원되지 않았던 시절에 나왔습니다.버퍼로만 작동하기 때문에 모든 것이 vim의 나머지 부분과 잘 통합됩니다.

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