버퍼와 같은 Vim의 탭 사용


366

나는 (와 빔에 탭을 사용할 수있는 기능 살펴 보았다 :tabe, :tabnew많은 파일을 숨겨진 버퍼에서 같은 창에서 열립니다 가진 내 현재의 관행에 대한 대체 등).

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

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

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

답변:


642

멈춰 멈춰

이것은 Vim의 탭이 사용되는 방식이 아닙니다. 사실, 그들은 이름이 잘못되었습니다. 더 나은 이름은 "viewport"또는 "layout"입니다. 왜냐하면 이것이 탭의 형식이기 때문입니다 . 기존 의 모든 버퍼 의 창 레이아웃이 다릅니다 .

Vim을 1 탭 == 1 버퍼로이기는 것은 무의미한 연습입니다. 빔은 알거나 관심과 그것을 모든 명령 - 인에 quickfix 버퍼 (사용 특히, 무엇이든 그것을 존중하지 않는 :make, :grep그리고 :helpgrep행복하게 탭을 무시합니다 마음에 봄이하는 것들) 그리고 당신이 정지 할 수있는 아무것도를 그.

대신 :

  • :set hidden
    이 세트가 아직 없으면 설정하십시오. vim은 지구상의 다른 모든 다중 파일 편집기처럼 작동합니다. 창에 보이지 않는 버퍼를 편집 할 수 있습니다.
  • 사용 :bn, :bp, :b #, :b name, 및 ctrl-6버퍼 전환합니다. 나는 ctrl-6나 자신을 좋아 한다 (혼자 이전에 사용한 버퍼로 #ctrl-6전환 하거나 버퍼 번호로 전환 #).
  • :ls버퍼 또는 MiniBufExpl 또는 BufExplorer 와 같은 플러그인을 나열하는 데 사용하십시오 .

192
나에게 이것은 "사용자 오류"가 아닌 버그입니다. 웹에서 'vim 탭'을 검색하면 다른 모든 사람이 귀하와 동의하지 않거나 Vim 탭을 사용하는 "실제"방법을 알지 못하는 것입니다. 또한 탭이 실제로 "레이아웃"보기 인 경우 왜 기본 파일 제목이 현재 파일 이름입니까? 동일한 파일을 여러 번 보려면 원하는 경우 모든 탭 제목이 같은 이름이됩니다 (별로 도움이되지 않습니까?). 따라서 어느 쪽을 보더라도 Vim의 기본 탭 구현에 결함이 있습니다.
cmcginty

45
탭 제목에 다른 내용이 있습니까? 현재 버퍼 이름 ( "파일 이름"이 아님)을 표시합니다. 어쨌든 탭 제목에 표시되는 내용을 변경할 수 있습니다.
aehlke

46
@Casey : FWIW, Vim의 탭에 대해 처음 알았을 때 Zathrus가 제공 한 정의를 정확하게 생각하면서 그것들에 대해 머리를 감싸 야했습니다. (나는 Vim 초보자 btw입니다). 그래서, 나는 그것이 깨지거나 직관적이지 않은 특징이라는 것에 동의하지 않습니다 ... 심지어 "모든 사람에 대하여"는 동의하지 않습니다 (그리고 적어도 하나 또는 두 개의 심판이 주장에 더 많은 무게를 줄 수 있다고 생각합니다). 여러 개의 동시 화면 레이아웃을 갖는 데 매우 효과적입니다.
ata

17
이 의견이 잘못되었습니다. 왜이 의견이 찬성 또는 수락되었는지 잘 모르겠습니다. 아래의 Robince에는 정답이 있습니다.-: sball 및 : switchbuf가 찾고 있습니다.
Roel

38
"중지, 정지, 정지"+1 Vim은 도구만큼이나 정신입니다. 새로운 사용자에게 정신을 가르치는 것이 중요하므로 도구를 최대한 활용할 수 있습니다.
Cody Poll

273

여기 파티에 늦었지만이 목록에서 다음을 보지 못했다는 것에 놀랐습니다.

:tab sball -열린 버퍼마다 새 탭이 열립니다.

:help switchbuf-버퍼 전환 동작을 제어합니다 :set switchbuf=usetab,newtab. 버퍼가 열려 있으면 기존 탭으로 전환하거나 그렇지 않으면 새 탭을 만들어야합니다.


4
+1 switchbuf- set switchbuf=useopen의 성가신 행동을 방지하기 위해 중대하다 :make, :vimgrep버퍼가 이미 표시에도 창 레이아웃 버퍼를 변경하고 유사한 명령을.
mMontu

3
왜 안 맞아? 설정 후 버퍼를 전환 :se switchbuf=usetab,newtab하는 데 사용할 때 bn기존 탭으로 전환하는 대신 현재 탭에서 버퍼 파일을 여전히 열 수 있습니까? 문제가 있습니까?
zhiyelee

173

Vim :help window은 혼란 "탭과 버퍼"를 잘 설명합니다.

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

vim에서 버퍼를 사용 하여 여러 파일을 열 수 있습니다 . 다른 편집기 (예 : notepad ++)에서는 탭으로이 작업이 수행되므로 vim의 이름 탭이 잘못 될 수 있습니다.

Windows 는 작업 공간을 분할하고 여러 파일 (버퍼)을 한 화면에 함께 표시하기위한 것입니다. 다른 편집기에서는 여러 GUI 창을 열고 바탕 화면에서 재 배열하여이 작업을 수행 할 수 있습니다.

마지막으로이 비유에서 vim의 탭 페이지 는 여러 데스크탑에 해당합니다. 즉, 창의 재배치가 다릅니다.

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

물론 많은 탭 페이지 나 창에 동일한 파일을 표시하면 동일한 작업 사본 (버퍼)이 표시됩니다.


11
이것은 실제로 굉장한 대답이지만 이해하기 위해 몇 번의 읽기가 필요했습니다. 버퍼 = 탭, 창 = gui 창, 탭 페이지 = 데스크탑은 개념에 익숙하지 않은 사람에게 가장 적합한 개념입니다
icc97

4
나는 그것들을 창을 통해 room- buffer= object , window= panetab= window 로 보는 것으로 생각하는 경향이 있습니다 . 나는 방을 돌아 다니면서 다른 에서 볼 수 있습니다 ( tabs). 다른 창은 다른 번호, 배열 및 크기의 수 창을 . 같은 객체가 동시에 다른에서 볼 수 있습니다 다른의 .
go2null

Linux Workspaces 및 Windows 패러다임에 익숙하다면 vim사용법 의 유산을 보게 될 것 입니다. 처음에는 단지 창문 이 있었다 . 그런 다음 창 관리자를 사용하여 창을 분할 창 (WM 타일) 또는 겹치는 분할 창 (플로팅 WM)으로 분할 할 수 있지만 여전히 각 분할 창을 창이라고합니다. 이제 여러 작업 공간에 분할 창을 표시 할 수있는 작업 공간 개념을 추가하십시오. 따라서이 패러다임에서는 buffer= app , window= windowtab= workspace 입니다.
go2null

56

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

<C-w>gfbuffers gf명령 과 동등한 탭 입니다. <C-PageUp><C-PageDown>탭 사이를 전환됩니다. Byobu에서이 두 명령은 작동하지 않지만 Byobu / tmux 외부에서는 작동합니다. 대안은 gtgT입니다.) <C-w>T현재 창을 새 탭 페이지로 이동합니다.

vim이 중복 탭을 생성하는 대신 가능한 경우 기존 탭을 사용하도록하려면 :set switchbuf=usetab.vimrc 파일에 추가 하십시오. 컴파일 오류를 표시하는 QuickFix 명령이 별도의 탭에서 열리도록 newtab목록 ( :set switchbuf=usetab,newtab)에 추가 할 수 있습니다 . 내가 선호 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.


3
vim -p그러나 +1은 기본적으로 최대 10 개의 탭만 표시됩니다. 추가 파일은 버퍼에로드되지만 자체 탭에는 표시되지 않습니다.
IanB

@ IanB : 10 탭으로 제한하는 기본 설정을 극복하는 방법은 무엇입니까?
0xC0000022L

3
@ 0xC0000022L tabpagemax설정 참조
IanB

14

나는 같은 문제에 부딪쳤다. 탭이 버퍼처럼 작동하기를 원했으며 결코 탭을 관리하지 못했습니다. 마지막으로 해결 한 해결책은 버퍼가 탭처럼 동작하도록하는 것입니다!

Mini Buffer Explorer 라는 플러그인을 확인하고 설치하고 구성하면 기능을 잃지 않고 탭과 동일한 방식으로 버퍼로 작업 할 수 있습니다.


10

이것은 Vim에 익숙하지 않고 다른 텍스트 편집기 (제 경우 Sublime Text)에서 온 사람들에게 답입니다.

나는이 모든 대답을 읽었으며 여전히 명확하지 않았습니다. 당신이 그것들을 읽는다면 충분한 것이 이해되기 시작하지만, 질문 사이에서왔다 갔다하는 데 몇 시간이 걸렸습니다.

첫 번째는 다른 사람들이 설명했듯이

탭 페이지는 , 같은 많은 소리 탭을 , 그들은 탭처럼 행동하고 다른 대부분의 GUI 편집기의 탭과 매우 비슷하지만, 그들은 아니에요. Vim에 내장 된 나쁜 정신 모델이라고 생각합니다. 불행히도 탭 페이지에있는 여분의 힘을 흐리게합니다.

내가 이해 한 첫 번째 설명은 @crenate의 대답 에서 나온 입니다. 여러 데스크톱과 동일하다는 것입니다. 이와 관련하여 두 개의 데스크탑 만 열어 두었지만 각 GUI 창에는 많은 GUI 창이 열려 있습니다.

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

  1. 탭 그룹
  2. 숭고한 텍스트 작업 공간 (예 : 프로젝트에있는 열린 파일 목록)

이러한 파일을 볼 때 CSS 파일, HTML 파일 및 JS 파일을 서로 다른 탭 페이지에서 쉽게 묶을 수있는 파일 세트 (버퍼)를 그룹화 할 수있는 기능을 활용할 수 있습니다. 실제로 꽤 굉장합니다.

혼란스러운 다른 설명

뷰포트

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

여러 데스크탑과 같은 탭 페이지를 보면 데스크탑을 단일 창으로 언급하는 것이 이상하게 보입니다.

작업 공간

이 가능성이 더 의미의 사전 정의 입니다 :

임시 사용을위한 메모리 저장 시설.

버퍼 그룹을 저장하는 곳과 같습니다.

처음에는 프로젝트에서 연 모든 파일의 목록 인 Sublime Text의 작업 공간 개념 처럼 들리지 않았습니다 .

숭고한 작업 공간 파일-열린 파일 및 각각의 수정 사항과 같은 사용자 별 데이터가 들어 있습니다.

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

창문 컬렉션

:help window탭 페이지에이 방법을 의미합니다. 다른 수많은 답변들도 같은 개념을 사용합니다. 그러나 vim 창이 무엇인지 알기 전까지는 모래 위에 성을 짓는 것과 같이 많이 사용되지 않습니다.

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

Vim에서 실제로 유용한 기능은 하나 이상의 파일 사이에서 볼 수있는 영역을 분할하거나 동일한 파일의 두 비트를 더 쉽게 볼 수 있도록 창을 분할하는 기능입니다. Vim 문서는 이것을 뷰포트 또는 창으로 상호 교환 가능하게 지칭합니다.

: help 주제를 사용하거나 F1 키를 눌러 Vim의 도움말 기능을 사용한 적이 있다면이 기능에 이미 익숙 할 것입니다. 도움말을 입력하면 Vim은 뷰포트를 분할하고 상단 뷰포트에서 도움말 문서를 열고 하단 뷰포트에서 문서를 열어 둡니다.

탭 페이지가 버퍼 모음 대신 창 모음이라고 불리는 것이 이상합니다. 그러나 두 개의 개별 탭 페이지가 각각 동일한 버퍼를 가리키는 여러 개의 창으로 각각 열릴 수 있다고 생각합니다. 적어도 지금까지 내가 이해 한 것입니다.


1
마지막으로 한 해 동안 전임 Vim을 견실하게 사용한 후 하나 이상의 탭 페이지를 사용하려는 사례를 발견했습니다. 다른 편집기에서 탭을 사용하므로 현재 버퍼가 완벽하게 작동합니다. 그러나 큰 모니터를 사용하면 3-4 개의 다른 버퍼를 비교했습니다. 그런 다음 동료가 코드베이스의 다른 곳에서 일부 코드를 검색하기를 원했습니다. 비교 창 세트를 잃지 않고 새 탭 페이지를 만든 다음 Vim을 정상적으로 사용할 때와 마찬가지로 별도의 검색을 수행 한 다음 탭 페이지를 한 번 닫고 초기 세트로 돌아갈 수 있습니다
icc97

4

도움말 탭 : vim이 원하는 방식으로 작동하려는 것처럼 보이지 않는 도움말 탭 ...

버퍼는 여러 탭에서 공유되므로 특정 버퍼 만 특정 탭에만 표시되도록 잠글 수는 없습니다.

그래도 좋은 생각입니다.

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


내가 탭 사이를 이동하기가 어렵게 외에, 그와 함께 문제를 그 시도,이 둘은 서로 다른 두 개의 터미널 / 쉘 본질적으로 그 꼴 텍스트, 터미널 탭에서 공유 할 수 없다
PUK

@puk : YankRing vim 플러그인을 사용해보십시오. 양키 된 텍스트를 파일로 저장하므로 vim 인스턴스 전체에서 공유 할 수 있습니다.
pixelastic

@ Pixelastic 나는 시스템 클립 보드에 yanking에 적합한 솔루션을 찾았습니다. 또한 Vim은 한 인스턴스에서 가장 잘 작동합니다. 나는 그것을 원했던 것을 멈추고 vim을 올바르게 사용하는 법을 배웠다 :-) stackoverflow.com/a/8757876/654789
puk

@puk : 감사합니다. 시스템 클립 보드를 사용한다는 것은 vim 인스턴스에서도 공유한다는 의미입니다. :)
pixelastic

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

    map gf :tabe <cfile><CR>
    

    나는 당신이 [^와 같은 일을 할 수 있다고 확신합니다

  • 나는 vim이 탭에서 이것을 지원하지 않는다고 생각한다 (아직). gt와 gT를 사용하여 다음 탭과 이전 탭으로 각각 이동합니다. Ngt를 사용할 수도 있습니다. 여기서 N은 탭 번호입니다. 필자가 가지고있는 한 가지 기본 사항은 기본적으로 탭 번호가 탭 줄에 표시되지 않는다는 것입니다. 이 문제를 해결하기 위해 .vimrc 파일 끝에 몇 가지 함수를 넣었습니다 (길이가 길고 형식이 잘못되어 붙여 넣지 않았습니다).


<c-w>gf새 탭에서 커서 아래 파일 이름을 엽니 다
피터 Rincker에게

4

BufExplorer 플러그인과 몇 가지 매크로를 사용하여 탭과 같은 버퍼를 사용 합니다.

" 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를 사용하면 상단에 탭 막대가 없지만 화면의 공간을 절약 할 수 있으며 무한한 수의 파일 / 버퍼를 열 수 있으며 버퍼 목록을 검색 할 수 있습니다 ...


2

버퍼가 탭처럼 작동하게하려면 tabline plugin을 확인하십시오 .

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

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