Vim을 종료하지 않고 버퍼를 닫고 언로드 이것은 내가 nohidden설정 했지만

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

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

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



답변

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


답변

: 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