Vim의 다중 레이어 뷰 (Windows, Buffers 및 Tabs)는 약간 혼란 스러웠습니다. 디스플레이 (: sp)를 분할 한 다음 각 창에 표시 할 다른 버퍼를 선택한다고 가정 해 보겠습니다. 이제 버퍼 중 하나를 닫고 싶지만 창을 닫고 싶지 않습니다 (닫은 후에는 목록에 다음 버퍼를 표시하거나 빈 버퍼를 표시 할 수 있지만 중요하지 않습니다). 어떻게 할 수 있습니까?
감사.
답변
Vim 위키 에는이를위한 스크립트가 있습니다 . 나는 당신이 원하는 것을 수행하는 내장이 있다고 생각하지 않습니다.
답변
나는 이것을 조금 엉망으로 만들었고 마침내 다음과 같이 생각해 냈습니다.
:bp | sp | bn | bd
키 매핑을위한 복사 / 붙여 넣기 버전은 다음과 같습니다.
:bp<bar>sp<bar>bn<bar>bd<CR>
나는 그것을 공정하게 테스트했으며 다양한 조건에서 일관되게 작동합니다. 마지막 버퍼에서 사용하면 새로운 빈 버퍼가 남게됩니다.
.vimrc에 이것을 던져라 :
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
Vim을 다시 시작하거나 :source ~/.vimrc
변경 사항을 적용하십시오. 다음에 버퍼를 닫으려면 다음을 입력하십시오. \q
( \
리더 키인 경우)
답변
나는 오늘 이것을 검색했고
:b#|bd#
현재 창을 이전에 열린 버퍼로 변경하고 방금 전환 한 버퍼를 삭제 / 숨 깁니다.
이를 위해서는 최소한 두 개의 알려진 버퍼가 필요합니다.
다른 창이지만 현재가 동일한 버퍼를 표시하면 여전히 분할을 파괴합니다. 모든 창을 이전에 열린 버퍼로 변경할 수 있습니다.
:windo b#
비슷한 질문 에 대한 답변으로 매핑 (및 일부 함정)을 논의하는 이전 명령에 대한 자세한 내용을 추가했습니다 .
답변
nmap <leader>d :bprevious<CR>:bdelete #<CR>
하나의 버퍼가 여러 창에서 열릴 때까지 정상적으로 작동합니다. 더 큰 스크립트를 사용하지 않는 한 충분합니다.
편집 : 이것은 내가 지금 사용하는 것입니다.
function! BufferDelete()
if &modified
echohl ErrorMsg
echomsg "No write since last change. Not closing buffer."
echohl NONE
else
let s:total_nr_buffers = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
if s:total_nr_buffers == 1
bdelete
echo "Buffer deleted. Created new buffer."
else
bprevious
bdelete #
echo "Buffer deleted."
endif
endif
endfunction
답변
나는 이것이 당신이 찾고있는 것 같아요
http://www.vim.org/htmldoc/windows.html#window-moving
이 시도:
사용하여 버퍼 ID를 살펴보십시오.
:buffers
거기에 버퍼 목록이 표시됩니다.
1 a.cpp
2 b.py
3 c.php
버퍼에서 b.py를 제거하려면
:2bw
버퍼에서 모두 제거 / 닫으려면
:1,3bw
답변
NERDTree를 사용하는 사람들을 위해.
이 플러그인 https://github.com/jistr/vim-nerdtree-tabs를 사용하여이 문제를 해결 하고 이제 창을 닫지 않고 유일한 buff / file / tab을 닫을 수 있습니다.
위의 플러그인을 설치 한 후 .vimrc에 다음 코드를 넣으십시오.
let g:nerdtree_tabs_autoclose=0
위의 변수에 대한 설명은 다음과 같습니다. 창이 하나만 있고 NERDTree (기본값 1) 인 경우 현재 탭을 닫습니다.
자세한 정보 : https://github.com/jistr/vim-nerdtree-tabs#configuration
답변
나는이 작업을 수행 할 수있는 하나의 샷 방법이라고 생각하지 않습니다,하지만 당신은 할 수 :enew
또는 :ls
사용하여 다른 하나에 버퍼 스왑을 나열합니다 :b [number]
.
창에 다른 버퍼가 있으면 창 :bd #
에서 이전 버퍼를 삭제하고 현재 버퍼가 여전히 존재하기 때문에 창이 닫히지 않습니다.