다음을 사용하여 vim을 열면:
$ vim -o a.ext b.ext
이런 창이 뜹니다
+----------------------+
| a |
| |
| a.ext ---------------+
| b |
| |
+ b.ext ---------------+
다른 파일을 열고 싶다고 가정해 보겠습니다. 그래서 c.ext
상단 :e c.ext
패널에서 다음과 같은 작업을 수행합니다.
+----------------------+
| c |
| |
| c.ext ---------------+
| b |
| |
+ b.ext ---------------+
하지만 이제 a.ext
파일에 액세스할 수 없어 사용할 수 없습니다 . 다시 사용할 수 있도록 :n
파일을 여는 올바른 방법은 무엇입니까 ?c.ext
a.ext
:n
답변1
이미 파일을 열 수 있다고 생각하지만 파일은 별도의 버퍼에 있으므로 주어진 창에서 다음 및 이전 버퍼로 이동하려면 :bn
(또는 전체 :bnext
및 ) 명령을 사용해야 합니다 .:bprev
답변2
이전에 열었던 파일로 돌아가려면 ':e #'을 시도하겠습니다.
답변3
댓글에서 다음과 같은 질문을 하셨습니다.
해당 창에 있는 파일만 반복하도록 하는 방법이 있습니까(현재 열려 있는 모든 파일이 아님)?
내 생각에는 Vim이 창("창")이 이전에 액세스한 모든 버퍼를 추적하지 않는 것 같습니다. 그러나 Vim은스크립트 가능…
다음은 다음을 사용하여 이 기능의 버전을 제공하는 구현입니다.자동 명령기록(에서창 지역 변수)는 창의 어떤 버퍼가 활성화되어 있는지 보여줍니다.
(축약된) 명령은 다음과 같습니다.
:Hb
이 창의 기록 버퍼를 나열합니다.:Hbn[!] [N]
N번째 다음 히스토리 버퍼로 전환합니다.
( 와 유사:bn
하지만 현재 창의 "기록" 버퍼로 제한됨):Hbp[!] [N]
처음 N개의 기록 버퍼로 전환합니다.
( 와 유사:bp
하지만 현재 창의 "기록" 버퍼로 제한됨):Hbf [N]
("forget") 현재 창의 기록 버퍼 목록에서 현재 버퍼(또는 버퍼 번호 N)를 제거합니다.
다른 버퍼로 전환하지 않고 이 창을 떠났다가 다시 들어가면 현재 버퍼가 기록 버퍼 목록에 다시 추가됩니다.
다음 코드는 파일 .vimrc
이나 별도의 파일(예: plugin/buffer-history/buffer-history.vim
파일 중 하나 아래) 에 넣을 수 있습니다.runtimepath
목차):
augroup UL17179_BufferHistory
autocmd!
autocmd BufEnter * call s:RecordBufEnter(0)
" Grab WinEnter, since BufEnter is not triggered when doing
" a bare ':split'. This also means that 'forgetting' a buffer is
" only effective if you switch to another buffer before
" switching away from the window.
autocmd WinEnter * call s:RecordBufEnter(1)
augroup END
function! s:EnsureBufferHistory()
if ! exists('w:BufferHistory')
let w:BufferHistory = []
endif
return w:BufferHistory
endfunction
function! s:RecordBufEnter(w)
let l = s:EnsureBufferHistory()
let b = winbufnr(0)
let i = index(l, b)
if i >= 0
unlet l[i]
endif
let l += [b]
redraw
endfunction
function! s:ForgetBuffer(...)
let l = s:EnsureBufferHistory()
for b in a:000
let b = b ? b+0 : winbufnr(0)
let i = index(l, b)
if i >= 0
call remove(l, i)
else
try
echohl WarningMsg
echomsg 'Buffer' b 'not in history list.'
finally
echohl None
endtry
endif
endfor
endfunction
function! s:ShowBuffers()
let l = s:EnsureBufferHistory()
for b in l
echomsg b bufname(b)
endfor
endfunction
function! s:HistoricalBufferNr(...)
let direction = a:0 >= 1 && !a:1 ? -1 : 1
let move_count = a:0 >= 2 ? max([1, a:2]) : 1
let current_bn = winbufnr(0)
let historical_buffers = copy(filter(s:EnsureBufferHistory(),
\ 'bufexists(v:val)'))
let i = index(historical_buffers, current_bn)
if i < 0
let other_historical_buffers = historical_buffers
elseif i == 0
let other_historical_buffers = historical_buffers[1:]
else
let other_historical_buffers = historical_buffers[i+1:] +
\ historical_buffers[:i-1]
endif
if len(other_historical_buffers) <= 0
try
echohl ErrorMsg
echomsg 'This window has no historical buffers!'
finally
echohl None
endtry
return 0
endif
if direction > 0
let i = (move_count - 1) % len(other_historical_buffers)
else
let l = len(other_historical_buffers)
let i = ((l - 1) * move_count ) % l
endif
return other_historical_buffers[i]
endfunction
" If the 1) user does not give a bang and
" 2) we run 'buffer N' (no bang) from inside the function and
" 3) switching away from the buffer would require a bang,
" then the user will see an ugly 'Error detected while processing
" function' prefix before the usual E37 error message. Hoisting the
" 'buffer<bang> N' into the user-defined command means the user will
" just see a normal E37 message.
command! -nargs=0 -count=1 -bang -bar
\ HistoricalBufferNext
\ let s:new_bn = s:HistoricalBufferNr(1, <count>)
\ | if s:new_bn | exe 'buffer<bang>' s:new_bn | endif
command! -nargs=0 -count=1 -bang -bar
\ Hbn
\ HistoricalBufferNext<bang> <count>
command! -nargs=0 -count=1 -bang -bar
\ HistoricalBufferPrev
\ let s:new_bn = s:HistoricalBufferNr(0, <count>)
\ | if s:new_bn | exe 'buffer<bang>' s:new_bn | endif
command! -nargs=0 -count=1 -bang -bar
\ Hbp
\ HistoricalBufferPrev<bang> <count>
command! -nargs=* -count=0 -bar
\ HistoricalBufferForget
\ call s:ForgetBuffer(<count>, <f-args>)
command! -nargs=* -count=0 -bar
\ Hbf
\ HistoricalBufferForget <count> <args>
command! -nargs=0 -bar
\ HistoricalBuffers
\ call s:ShowBuffers()
command! -nargs=0 -bar
\ Hb
\ HistoricalBuffers