Vim에서 버퍼간에 전환하는 것을 선호합니까?


답변:


23

저는 Wincent Colaiuta의 Command-T vim 플러그인 을 몇 달 동안 사용하고 있습니다. Wincent는 C에서 빠를 필요가있는 부분을 작성했고, 그렇다고 말해야합니다! 그리고 파일 패턴 매칭 로직이 Textmate의 Command-T보다 훨씬 낫다고 생각합니다. 스크린 캐스트를 확인하십시오 .

VIM 용 Command-T 플러그인은 최소한의 키 입력으로 파일을 열 수있는 매우 빠르고 직관적 인 메커니즘을 제공합니다. TextMate의 Command-T에 바인딩 된 "파일로 이동"창에서 영감을 얻었 기 때문에 "Command-T"로 명명되었습니다.

파일은 경로에 나타나는 문자를 입력하여 선택되며 특정 위치 (예 : 경로 구분 기호 바로 뒤)에 나타나는 문자에 더 많은 가중치를 부여해야 함을 알고있는 알고리즘에 의해 정렬됩니다.

보다 쉬운 버퍼 전환 에는 많은 유용한 팁이 포함되어 있습니다. 버퍼 이름 자동 완성을 수행하는 .vimrc에 다음을 적용하고 가장 유용한 버퍼 전환 명령을 내 <Leader> 및 왼쪽 홈 행 키에 매핑하고 현재 버퍼 번호를 상태 줄에 표시합니다. :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

또한 MiniBufExplorer 를 사용 합니다.이 기능은 나열된 각 버퍼를 자체 수평 분할 상단에 간결하게 나열합니다.


73

저는 탭과 여러 gvim 인스턴스의 조합을 사용하여 관련 파일 그룹을 각 인스턴스에서 탭으로 유지했습니다. 한 인스턴스에 너무 많은 탭이 포함되지 않는 한 탭 표시 줄에는 편집중인 각 파일의 이름이 한 눈에 표시됩니다.

그런 다음 Jamis Buck 이 TextMate에서 vim으로 전환 방법에 대한 게시물을 읽고 몇 가지 훌륭한 트릭을 배웠습니다.

  • 현재 창을 분할하려면 Ctrl-w s 및 Ctrl-w v
  • Ctrl-6을 사용하여 동일한 창에서 두 버퍼 사이를 앞뒤로 전환합니다.
  • 현재 디렉토리 또는 현재 열려있는 버퍼의 파일 검색을 자동 완성 하는 멋진 fuzzyfinder.vim
  • Jamis의 고유 한 fuzzy_file_finderfuzzyfinder_textmate는 fuzzyfinder 가 TextMate의 유사한 기능처럼 작동하도록 작동하는 방식을 약간 수정합니다 (내가 말할 수있는 한 차이점은 처음부터가 아니라 파일 이름의 모든 위치와 일치한다는 것입니다). 이 비디오 를 시청 하여 실제로 확인하십시오.

이제 하나의 gvim 인스턴스를 최대화하고 여러 창으로 분할하여 한 번에 여러 파일을 볼 수 있습니다. Ctrl-F를 fuzzyfinder_textmate에 바인딩 했으므로 이제 Ctrl-F를 입력하면 mod/usobapp / models / user_observer.rb가 열립니다. 나는 더 이상 탭을 거의 사용하지 않습니다.

업데이트 2010/08/07

Fuzzyfinder_textmate는 여전히 훌륭하지만 Casey가 주석에서 지적했듯이 더 이상 유지되지 않습니다. 또한 대규모 프로젝트 (많은 디렉토리 또는 파일)로 작업 할 때이 파일 (및 / 또는 fuzzyfinder.vim)이 약간 느리고 불안정 해 지므로 대안을 찾고있었습니다.

다행히도 Wincent ColaiutaCommand-T 플러그인 형태의 아주 좋은 대안이있는 것 같습니다 . 이것은 fuzzyfinder_textmate와 매우 유사하지만 (약간 더 좋지는 않지만) 동작이 눈에 띄게 더 빠릅니다. 또한 발견 된 파일을 분할 또는 수직 분할로 열 수있는 것과 같은 멋진 기능이 있습니다. 지적 해 주신 David Rivers에게 감사드립니다.


예, 퍼지 파인더는 제가 원하는 것에 매우 적합합니다.
Alexey Romanov

Jamis의 fuzzyfinder_textmate가 vim을 완료합니다. 정말 핵심 기능이되어야합니다!
csexton

Jami가이 프로젝트 작업을 중단 한 것 같습니다. 원저자가 이러한 기능을 가져올까요? weblog.jamisbuck.org/2009/1/28/…
cmcginty

샘, 소품 주셔서 감사합니다 당신은 (내 생일에!) 내게 준 : D
데이비드 강

14
ctrlp vim 플러그인 ( kien.github.com/ctrlp.vim )을 사용해보세요. fuzzyfinder를 구현하지만 훨씬 더 유용한 기능이 있습니다. :)
Philip

33

나는 기본- ' :ls'+ ' :bn'/ ' :bp'+ ' :b <part-of-name>'를 사용합니다.


8
:-) 같은 문장에서 "simple"과 " ': ls'+ ': bn'/ ': bp'+ ': b <part-of-name>'"이 나올 거라고는 생각도 못했어요.
paxdiablo

16
팍스, 아직 안보여요. :-)
csexton

이것은 플러스 :map <c-n> :bn<cr>:map <c-p> :bp<cr>이후 C-nC-p입력 빠르며 버퍼 사이의 순환을 허용 당신은 반복을 누르면. (나는 원래 용도로 사용되지 않습니다.) 그것은으로 브라우저 탭 사이를 순환처럼 C-PgUpC-PgDn또는 브라우저가 바로 가기 뭐든간에.
Tobia 2015 년

Ctrl + N은 대부분의 다른 편집기에서 '새 파일'의 표준이고 Ctrl + P는 붙여 넣기 명령이므로 대부분의 사람들에게이 방법은 매우 혼란 스러울 것입니다. Tim Pope의 vim-unimpaired[b이전 버퍼와 ]b다음 버퍼를 제공합니다. ]다음과 [이전 에 대한 개념을 사용하는 다른 많은 혜택도 있습니다 .
icc97

31

나는 창을 분할하기 위해 "ctrl-w s"와 "ctlr-w v"를 좋아한다. 그런 다음 Ctrl 키를 누른 상태에서 이동 키 (h, j, k, l)를 매핑하여 분할 된 창 사이를 이동합니다.

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

내 손을 화살표 키로 옮겨야하는 것은 성가신 일입니다.

다음으로 ctlr-tab을 설정하여 현재 창에서 버퍼 사이를 전환합니다 (많은 다른 환경과 마찬가지로).

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

vim은 항상 당신이 알 수있는 것보다 더 많은 비밀을 가지고 있지만 이것들은 지난 몇 년 동안 저에게 꽤 잘 작동했습니다.


3
Vim에 이미 대체 파일이 있고 이전에 사용하던 파일이므로 ctrl-6을 사용하여 현재 (%) 및 대체 (#) 파일을 쉽게 전환 할 수 있으므로 "대체 파일로 전환"이라는 의견은 잘못된 것입니다.
graywh 2009

10
또한 hjkl이있는 <Cw>는 창을 전환합니다. 화살표 키는 필요하지 않습니다.
graywh 2009

4
<CS-Tab>에서 RSI를 요청합니다. <SJ>를 :bp<SK>에 매핑 했습니다:bn
puk

3
Remapping <SJ>는 일반적으로 (줄을 연결하기 위해) 사용되는 일반 모드에서 좋지 않은 선택처럼 보입니다.
Michael Percy 2013 년

18
nmap <Leader>bb :ls<CR>:buffer<Space>

아무도 멋진 플러그인 ctrlp.vim을 언급하지 않았습니다 . 이 플러그인을 사용하면 이름으로 버퍼를 검색 할 수 있습니다.


나는 그 매핑을 좋아한다! 스마트하고 유연합니다.
ivan dec


5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

1
Vim의 가장 흥미로운 점은 매일 무언가를 배울 수 있다는 것입니다!
Luc M

질문은 탭이 아니라 버퍼 에 관한 것입니다 .하지만 먼저 할 수 있습니다 . 또는 사용하는 대신에 사용해야합니다:tab sball:tabn:buffer
pera

5

나는 최근에 더 최소한으로 갔다.

내가 사용 ]b하고 [b손상되지 않은 버퍼를 순환하려면 : https://github.com/tpope/vim-unimpaired

오픈 버퍼로 바로 이동하려면 Vim의 탭 완성을 :b. 탭 한두 개가있는 열린 버퍼에 도달하려면 몇 글자이면 충분합니다.

오픈 버퍼 :e와 유사하게 상대 경로와 탭 완료와 함께 사용 합니다.

나는 또한 내가 :ls어떤 버퍼를 열 었는지 (그리고 수정 된 상태를 확인하기 위해) 가끔 사용 합니다.

버퍼를 제거하기 위해 버퍼 :bw를 지우는 데 사용 합니다. 일반적으로 :bw활성 창을 닫기 때문에 레이아웃을 유지하기 위해 임시로 분할하고 버퍼를 변경 합니다.

내가 시도한 모든 미니 버프 작업은 결국 나를 짜증나게했고, 나는 나를 위해 임의의 파일을 여는 스마트 매칭을 원하지 않는다. 정말로 무언가를 찾아야한다면 NERDtree ( :e .)를 사용합니다.

IDK, 최근에 나는 Yankring을 떨어 뜨 렸고 (왜냐하면 그것이 망가 져서 xp) 레지스터를 사용하기 시작했고, 최근에 나는 f/ t움직임이 지금까지 가장 위대한 것이라고 결정했습니다 ...


이것은 모두 훌륭한 조언입니다. 에 매핑 <leader>ll했습니다 :ls. 또한 그것은 당신이 가지고 있는지 확인하기 위해 정말 유용 set wildmenu당신에 .vimrc대한 모든과 대안을 제공으로 당신이 얻을 작은 메뉴:b
icc97

2

뛰어난 Buffer Explorer , be는 다른 응용 프로그램에서 사용할 수 있기를 바라는 강력한 근육 메모리가되었습니다. 두 개 이상의 파일을 적극적으로 편집 할 때 매우 빠릅니다.


2

이 HTML :: Mason 프로젝트로 작업하기 위해 .vimrc를 만드는 데 꽤 오랜 시간을 보냈기 때문에 탭과 분할 창을 이상하게 혼합했습니다. 시청 즐거움을 위해 :

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

2

나는 tselectbuffer를 사용 합니다 . 정말 빠르며 bufexplorer와 달리 창에서 공간을 차지하지 않습니다. 또한 증분 검색 기능이 있습니다. minibufexplorer를 사용해 보았는데 버퍼의 탐색이 약간 어렵다는 것을 알았습니다.


포인터 주셔서 감사합니다. 이제 둘 다 사용합니다. BufExplorer의 기본값은 ,be, ,bs, ,bv, 그래서에 TSelectBuffer 매핑 ,bb.
브래디 Trainor

2

버퍼를 나열하고 전환하려면 다음을 사용합니다.

nnoremap <Leader>l :ls<CR>:b<space>

버퍼 사이를 전환하려면 :

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

2

나는 매핑 한 <S-J><S-K>:bp:bn, 내가 파일의 수로 사용하지 않는 인정하지만, 더 큰이 10보다 그때 매핑 한 <C-J><C-K>그놈 터미널의 이전 및 다음 탭에, 나는 보통 각 정력의 4 개 인스턴스를 실행 제가 작업하는 4 가지 프로젝트입니다. 나는 여전히 다음과 이전 버퍼가 버퍼 목록의 순서가 아닌 내가 작업해온 버퍼의 역사로 이동하기를 바랍니다.


2

tselectbuffer를 사용합니다. 정말 빠르며 bufexplorer와 달리 창에서 공간을 차지하지 않습니다. 또한 증분 검색 기능이 있습니다. minibufexplorer를 사용해 보았는데 버퍼의 탐색이 약간 어렵다는 것을 알았습니다.


0

^ W + w / ^ W + r과 함께 간단한 : vsplit을 사용하고 Ctrl + Alt + PgUp / PgDown 키 조합을 사용하여 : tabnew를 사용합니다.


1
나는 여기서 Zathrus가 말한 것에 동의해야한다 . Vim의 탭 (또는 TabBar가있는 Emacs)은 일반적인 탭 인터페이스 에서처럼 작동하지 않습니다.
Alexey Romanov

0

Vim 세션에 여러 개의 버퍼가 열려 있으면 버퍼와 해당 버퍼 번호를 추적하기가 어려울 수 있습니다. 이 경우 간단한 맵을 사용하여 다른 파일로 쉽게 전환 할 수 있습니다.

: nnoremap (F5) : buffers (CR) : buffer (Space)

vim.wikia.com

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