Vim에서 단일 버퍼를 여러 개로 닫으려면 어떻게해야합니까?


445

예를 들어 다음과 같이 Vim에서 여러 파일을 엽니 다.

vim a/*.php

23 개의 파일이 열립니다.

그런 다음 편집하고 다음을 두 번 실행하십시오.

:q

모든 버퍼가 닫힙니다.

Vim에서 하나의 버퍼 만 어떻게 닫을 수 있습니까?


9
vim -o a/*.php(또는 -O세로 창을 사용 하여) 별도의 Vim 창에서 파일을 열고 버퍼 탐색을 피할 수 있습니다.이 방법은 파일이 적을 때만 좋은 방법이지만 23 파일을 사용하면 몇 줄 / 열만 있습니다 마다.
Cascabel

1
@Jefromi : 지적 해 주셔서 감사합니다! 전에는 옵션 -o를 사용한 적이 없습니다.
Léo Léopold Hertz 준영

창 분할의 주제에 대해. 이미 Vim에 있고 다른 파일을 가로로 나누려면 : esp를 가로로 놓고 : evsp를 세로로 바꾸십시오.
Lanzafame

답변:


558

주의 사항 : "bw의 w는 쓰기가 아니라 지우기를 의미합니다!"

매뉴얼에서 더 많은 것 :

: bd

버퍼 [N] (기본값 : 현재 버퍼)을 언로드하고 버퍼 목록에서 삭제하십시오. 버퍼가 변경된 경우 [!]를 지정하지 않으면 변경이 손실됩니다. 파일은 영향을받지 않습니다.

당신이하고있는 일을 알고 있다면 다음을 사용할 수도 있습니다 : bw

: bw

| : bdelete |와 같지만 실제로 버퍼를 삭제하십시오.


4
또한 일 가능성 : N. 아니면 가까이 버퍼 번호에 M 'M, NBD' 'BD N1 N2는 ...'N 번호가 버퍼 수임
갇힌

61
매뉴얼은 :bw"당신이 무엇을하고 있는지 아는"경우 에만 사용하라고 말합니다 :bd.
jberryman

1
처음에 이것에 혼란 스러웠습니다. 버퍼를 닫기 위해 새 탭을 열었습니다 ...하지만 탭에서 버퍼를 닫으면 (똑바로 :bd) 탭이 닫힙니다. 당신이 아마 원하는 것은 :bd n .. [m]또는 :n,mbd특정 번호 또는 버퍼를 보지 않고 할 수있는 가까운 숫자의 범위
JonnyRaa

5
wwriteVim 매뉴얼에 따라 명령 이 짧으며 , "wipeout"에 대한 언급이 없습니다. 명령 ( help write)에 대한 설명은 "전체 버퍼를 현재 파일에 기록"으로 시작합니다.
amn

3
@amn 너무 혼동되었다, 그러나 그는 의미 wbw그가 얘기되지 떨어졌네 명령 수단 w명령. 그는 사람들이 bw명령이 버퍼 쓰기를 의미 한다고 생각하지 않도록이 경고를 거기에 뒀습니다 (버퍼 소거를 의미하지는 않습니다)
John

351

이전 답변으로 이것이 명확하지 않은 경우 :

: bd 는 현재 버퍼를 닫습니다. 버퍼 목록을 원하지 않으면


4
: bd를 찾기 전에 사람들이 : ls-> doc number 스캔-> unload buffer by number를 수행하는 데 아무런 문제가 없다는 것이 전혀 의미가 없었습니다. 사람들은 실제로 이것이 효과적이라고 생각합니까?
Svend

3
다양한 버퍼의 경우 @svend이지만 고독한 버퍼의 경우 : bd가 더 효과적입니다.
Pharaun


10
:bd버퍼를 닫는 반면 (그것이 무엇이든간에) :bw모든 변수를 지우고 ls버퍼 에서 버퍼를 제거합니다 .
RedX

1
hhh의 대답은 더 장황하다…

103

: buffers를 사용하여 버퍼 ID를 확인하십시오.

다음과 같은 버퍼 목록이 표시됩니다.

1  a.php
2  b.php
3  c.php

버퍼에서 b.php를 제거하려면

:2bw

버퍼에서 모두 제거 / 닫으려면

:1,3bw

4
또한 다음과 같이 모든 버퍼를 초기화 할 수 있습니다 : % bw
cdleonard

7
CTRL 2-G : 쇼트 컷 ID 버퍼 확인
갇힌

43

: ls 명령의 출력을 찾아보고 번호를 지정하여 버퍼를 삭제 (언로드, 와이프 ..)하는 대신 파일 이름을 사용하는 것이 더 효과적이라는 것을 알았습니다.

예를 들어, 몇 가지 .txt 파일을 열어서 몇 가지 좋은 점에 대한 추억을 새로 고친 후 몇 줄의 텍스트를 복사하여 붙여 넣은 후 일종의 템플릿으로 사용할 수 있습니다. 등.

:bd txt <Tab>

일치하는 문자열이 파일 이름의 시작 부분에있을 필요는 없습니다.

위의 화면 하단에 'txt'와 일치하는 파일 이름 목록이 표시되고 처음에 입력 한 : bd 명령을 그대로 유지하여 완료 할 수 있습니다.

예를 들면 다음과 같습니다.

doc1.txt doc2.txt
:bd txt 

'txt'비트 위로 백 스페이스를 지우고 삭제하려는 파일 이름을 입력 할 수는 있지만 실제로는 필요하지 않습니다 .Tab 키를 두 번 누르면 Vim이 자동으로 명령을 완료합니다. 첫 경기 :

:bd doc1.txt

이 특정 버퍼를 제거하려면 Enter 키를 누르십시오.

그리고 삭제하려는 버퍼가 두 번째 (세 번째 등) 일치하는 경우 Tab 키를 계속 누르고 있으면 : bd 명령이 일치하는 목록을 순환하도록합니다.

당연히,이 방법은 : b .. : sb. 등과 같은 명령을 통해 주어진 버퍼로 전환하는데 사용될 수 있습니다.

이 방법은 '숨겨진'Vim 옵션이 설정 될 때 특히 유용합니다. 버퍼 목록이 빠르게 커져서 여러 화면을 덮을 수 있고 내가 찾고있는 특정 버퍼를 찾기가 어렵 기 때문입니다.

이 기능을 최대한 활용하려면 다음 Vim 도움말 파일을 읽고 작업 흐름에 가장 적합하도록 Tab 명령 줄 완성 동작을 조정하는 것이 가장 좋습니다.

:help wildmode

위에서 설명한 동작은 다음 설정의 결과로, bash 완료를 에뮬레이트하기 위해 일관성을 위해 선택했습니다.

:set wildmode=list:longest,full

버퍼 번호를 사용하는 것과는 대조적으로,이 방법의 장점은 일반적으로 주어진 파일 이름의 적어도 일부를 기억한다는 것입니다.


40

사용하다:

  • :ls -버퍼를 나열
  • :bd#n- #N 버퍼 번호 근접 버퍼 (사용 ls을 얻기 위해)

예 :

  • 버퍼 2를 삭제하려면 :

    :bd2
    

16

다음과 이전을 기능 키에 매핑하여 버퍼를 쉽게 순환시킬 수 있습니다.

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

내 vimrc에서


2

어때요?

vim -O a a

그렇게하면 왼쪽에서 단일 파일을 편집하고 오른쪽에서 전체 디렉토리를 탐색 할 수 있습니다 ... 해결책이 아니라 생각입니다 ...


2

[편집 : 이것은 내가 Vim을 충분히 알지 못하는 때부터 어리석은 제안이었습니다. 버퍼 대신 탭을 사용하지 마십시오. 탭은 Vim의 "창 레이아웃"입니다.]

탭 사용으로 전환 하시겠습니까?

vim -p a/*.php 탭에서 동일한 파일을 엽니 다

gtgT스위치 탭 앞뒤로

:q 현재 탭만 닫습니다

:qa 모든 것을 닫고 종료

:tabo 현재 탭을 제외한 모든 것을 닫습니다.


2
왜 탭을 사용하는 것이 어리석은 제안이라고 말합니까? 나는 항상 탭을 사용하기 때문에 묻습니다 ... : ^ /
Nate


1
그것은 훌륭한 글이었습니다. 그것은 더 깊이 파고 들도록 영감을주었습니다 wildmenu. lustyjuggler와 비슷하지만 내장되어 있습니다 (lustyjuggler가 필요 +ruby하고 우분투 oneiric 선박의 기본 vim 이기 때문에 나에게 좋았습니다 -ruby).
Nate

@ Nate : 예, 와일드 메뉴를 사용하여 파일을 열고 있지만 프로젝트에 많은 파일이 있으면 크기가 조정되지 않습니다. 또한 vim-nox우분투 패키지는 Ruby를 지원합니다.
Leonid Shevtsov

1

Buffergator 또는 NERDTree와 같은 버퍼 또는 트리 탐색 플러그인을 사용하는 사용자는 현재 버퍼를 파괴하기 전에 이러한 분할을 토글해야합니다. 그렇지 않으면 분할을 wonkyville로 보냅니다.

나는 사용한다:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

NERDTreeToggle이 목록에서 " "는 입력과 동일합니다 :NERDTreeToggle. 이 기능을 수정하여 자신의 구성과 통합 할 수 있습니다.


이를 위해, bbye의 플러그인을 사용할 때 창 레이아웃을 보존 완벽 :bdelete:bwipeout. 내 답변을 참조하십시오 .
울프슨

0

창을 닫지 않고 버퍼 닫기

윈도우 레이아웃 (스플릿을 기반으로 한 현재 레이아웃)을 파괴하지 않고 버퍼를 닫으려면 bbye 와 같은 플러그인을 사용할 수 있습니다 . 이를 바탕으로 바로 사용할 수 있습니다

:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)

또는 다음 .vimrc과 같이 쉽게 액세스 할 수 있도록 매핑을 만듭니다.

:nnoremap <Leader>q :Bdelete<CR>

vim의 장점 : bdelete 및 : bwipeout

로부터 플러그인의 설명서 :

  • 버퍼를 닫고 제거하십시오.
  • 해당 창에 다른 파일을 표시하십시오.
  • 다른 파일을 열지 않은 경우 빈 파일을 표시하십시오.
  • 해당 창에서 다른 파일을 편집하기로 결정한 경우 쓸모없는 [파일 없음] 버퍼를 두지 마십시오.
  • 파일이 여러 창에서 열려 있어도 작동합니다.
  • 다양한 버퍼 탐색기 및 탭 막대로 작업하십시오.

: b 삭제 vs : bwipeout

로부터 플러그인의 설명서 :

Vim에는 버퍼를 닫기위한 두 가지 명령이 있습니다 : :bdelete:bwipeout. 전자는 버퍼 목록에서 파일을 제거하고 옵션, 변수 및 매핑을 지 웁니다. 그러나 점프리스트에 남아 있으므로 Ctrl-o파일을 다시 열어서 다시 엽니 다. 그것이 당신이 원하는 것이 아니라면, :bwipeout또는 사용 했던 Bbye와 동등한 :Bwipeout것을 사용하십시오 :bdelete.

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