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 너무 혼동되었다, 그러나 그는 의미 w에 bw그가 얘기되지 떨어졌네 명령 수단 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 탭에서 동일한 파일을 엽니 다

gt및 gT스위치 탭 앞뒤로

: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.