Vim을 종료하지 않고 버퍼를 닫고 언로드


54

종종 일부 정보를 임시 버퍼에로드 한 다음로 닫습니다 :clo!. 그러나 이것은 내가 nohidden설정 했지만 버퍼를 완전히 언로드하는 대신 버퍼를 숨 깁니다 . Vim을 종료했을 때 이미 버린 내용에 대해 추가 확인을 받았기 때문에이 피곤함을 발견했습니다.

:q!대신 사용할 수도 있지만 버퍼가 하나만 남아 있으면 Vim을 완전히 종료하기 때문에 나쁜 습관입니다. 더구나, 오타를 :qa!하면 많은 일을 잃을 수 있습니다.

중간 지점이 있습니까? 현재 버퍼를 죽이지 만 Vim을 종료하지 않는 명령을 정말로 원합니다. Vimscript로 작성하는 것에 반대하지는 않지만 명령이 이미 존재하면 피하는 것이 좋습니다.

답변:


68

정확히 그렇게하는 명령이 있습니다 : :bdelete또는 그냥 :bd. 기본적으로 현재 버퍼를 언로드합니다. 다른 버퍼를 언로드하려면 먼저 :buffers명령을 사용 하여 모든 버퍼 목록을 가져 오십시오. 그런 다음 :bd제거 후 번호를 지정할 수 있습니다 . 또한 :bd+ space+ tab는 버퍼 이름을 사용하여 완료를 허용합니다.


1
이것은 마지막으로 열린 버퍼에서 작동하며, 정확히 내가 원하는 것은 아니지만 종료되지 않기 때문에 내 목적에 충분합니다.
Kevin

vim-bbye 플러그인은 당신이 찾는 것일 수도 있습니다 : github.com/moll/vim-bbye
alxndr

1
이 작동하지 않습니다 VI
연상

또한 내장 별칭 :ls이 기억하기 쉽고 (imo) 다음과 동일합니다.:buffers
kuzyn

버퍼를 언로드하지 않습니다. 실제로 닫지도 않습니다. 단순히 'buflisted'를 설정 해제합니다. vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

: bwipeout (또는 : bw) 명령을 사용하여 버퍼를 완전히 지울 수 있습니다. 이렇게하면 추가 한 마크, 옵션 설정 등을 포함하여 메모리에서 버퍼가 완전히 제거됩니다. 마찬가지로 : bdelete (또는 : bd)는 버퍼를 제거하지만 메모리에 남겨두고 표시 및 옵션 설정을 유지합니다.

Tom Hale의 의견에 따라 Vim 설명서에는 수행중인 작업을 모르는 경우 : bd over : bw를 사용하는 것이 좋습니다. 메모리에서 버퍼를 완전히 제거한다는 아이디어와 같이 : bw를 사용하는 경향이 있으며 버퍼를 닫은 후에도 마크, 버퍼 특정 옵션 설정 등을 많이 사용하지 않기 때문에 사용하지 않는 경향이 있습니다.

: quit (: q) 명령과 마찬가지로 Vim은 버퍼가 변경된 경우 오류를 발생시킵니다. 이를 해결하기 위해 명령 뒤에 느낌표를 추가하여 프롬프트를 표시하지 않을 수 있습니다. 느낌표를 모든 것에 추가하는 대신 다른 옵션은 "set confirm"을 vimrc에 추가하는 것입니다. 이 설정을 사용하면 vim은 파일 변경 사항을 저장하라는 메시지를 표시합니다.

: bufdo는 모든 활성 버퍼에서 다른 명령을 수행하는 유용한 명령입니다. : bufdo 명령과 : bw / : bd 명령을 결합하면 모든 활성 버퍼를 한 번에 제거 할 수 있습니다. 느낌표를 사용하여 오류를 억제 할 수 있지만 : bufdo 뒤에, : bw 뒤에 또는 둘 다에 배치하면 각각에 대해 다른 결과가 발생합니다.

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

다른 유용한 버퍼 명령은 다음과 같습니다.

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

이 질문의 범위를 벗어난 버퍼 처리에는 더 많은 것이 있습니다. 살펴보십시오 :
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


이 답변에 설명을 추가해 주시겠습니까?
EvergreenTree

도움말 은 "무엇을하고 있는지 알지 못한다면 이것을 사용하지 마십시오"라고 말하며 :bd대부분의 경우에 선호 됨을 나타냅니다.
Tom Hale

1
@TomHale :bw"버퍼와 관련된 모든 것이 손실됩니다.이 버퍼의 모든 마크가 유효하지 않게되고, 옵션 설정이 손실됩니다."이외의 다른 작업을 아는 것이 좋습니다 . Vim을 완전히 종료하면 버퍼를 '닫기'하고 싶다면 완벽하게 합리적입니다.
Kenny Evitt

: bd를 사용하고 : bd를 사용한 다음 <ctrl-^>을 눌러 마지막으로 사용한 버퍼로 이동하면 메모리에서 가져옵니다. : bw 나에게 더 많은 제어권을 부여하고 내가 원하는 것을 수행합니다 ^^
eli

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