Vim - 변경되지 않은 경우 숨길 때 버퍼 삭제

Vim - 변경되지 않은 경우 숨길 때 버퍼 삭제

나는 다른 Vim 버퍼에 열려 있는 파일 사이를 빠르게 이동하는 경향이 있습니다.

파일 간을 빠르게 전환할 때(예: 빠른 수정 목록, 확인 결과, 태그) 파일이 열렸다가 즉시 숨겨지는 경우가 많습니다. 그러나 버퍼는 계속 열려 있어 열려 있는 버퍼 목록이 오염됩니다.

어떤 방식으로든 수정되지 않은 경우 버퍼를 숨기지 않고 닫도록 설정하려면 어떻게 해야 합니까?

답변1

대부분이 단점을 갖고 있기 때문에 이에 대한 훌륭한 해결책은 없습니다.

당신은 시도할 수 있습니다 :set bufhidden=delete(참조'bufhidden'자세한 내용은.) 이는 귀하가 원하는 것과 매우 유사해 보입니다.

그러나 'bufhidden'이는 버퍼에 대한 로컬 설정이므로 모든 새 버퍼에 대해 설정해야 하거나 설명하는 대로 임시 버퍼에 대해 설정해야 합니다. autocmd숨길 때 삭제해야 하는 버퍼에 대한 기준에 따라 잠재적으로 그 중 하나 또는 몇 개에서 그렇게 할 수 있습니다 .

또한 Vim 문서에서는 해당 옵션을 사용하지 말 것을 강력히 권장합니다!

주의 깊은:unload, delete또는 가 사용 되면 wipe버퍼의 변경 사항은 경고 없이 손실됩니다. 또한 이러한 값은 버퍼 간을 일시적으로 전환하는 자동 명령을 중단할 수 있습니다.

그럼 아마도 시작이 아닌 것 같습니다 ...

또한 있습니다 :set nobuflisted(참조'buflisted', 버퍼가 존재하는 경우 :ls출력에는 나열되지 않습니다.

이는 버퍼에 대한 로컬 설정이기도 하므로 autocmd새 버퍼에 설정하려면 이 필요합니다.

이것은 위험하지 않은 것 같고 요청한 대로 거의 수행되는 것 같습니다. 하지만 이것은 심지어현재의버퍼 또는 열려 있는 창에 대한 버퍼이므로 기본적으로 :ls항상 비어 있게 되어 쓸모가 없게 됩니다. 이 경우 버퍼를 남겨두는 것보다 정말 더 나을까요?

마지막으로 대규모 작업(예: 관련 :args또는 빠른 수정) 후에 버퍼를 정리할 수 있습니다. 모든 작업을 완료하고 저장한 후에는 다음을 사용할 수 있습니다.

:%bd

이렇게 하면 모든 버퍼가 닫히고 편집할 새 빈 파일이 남게 됩니다. (문서를 참조하세요.:bdelete.)

새로운 것으로 전환하고 소수의 버퍼만 유지하고 싶을 때 유용한 명령이 될 수 있으므로 파일 이름의 짧은 하위 문자열 또는 :bnext및 친구를 사용하여 버퍼 간에 빠르게 전환할 수 있습니다.

답변2

이것이 제가 생각해낸 것입니다. 지금까지는 만족스럽습니다.

" Unlist unchanged buffers if they are hidden
function! BufferUnchanged()
  return exists("b:undo_seq_load") && b:undo_seq_load==changenr()
endfunction
function! UnlistUnchangedBuffer()
  if BufferUnchanged()
    set nobuflisted
  endif
endfunction
" Save the undo sequence position on buffer load
autocmd BufReadPost * let b:undo_seq_load=changenr()
autocmd BufWinLeave * call UnlistUnchangedBuffer()

관련 정보