В фаворитах MC или закладках хранятся в каталоге рабочего списка.
HotlistКоманда рабочего списка Каталога показывает маркировки каталогов в рабочем списке каталога. Полуночный Командующий изменится на каталог, соответствующий выбранной маркировке. От диалогового окна рабочего списка уже можно удалить созданных пар маркировки/каталога и добавить новые. Для добавления новых каталогов быстро можно использовать Добавление к команде рабочего списка (Ctl+x, h), который добавляет текущий каталог в рабочий список каталога, прося только маркировку для каталога.
Это делает CD к часто используемым каталогам быстрее. Можно рассмотреть использование переменной CDPATH, как описано во внутреннем описании команды CD. [1]
Можно также использовать рабочий список для хранения FTP-сайтов, к которым часто получают доступ: при доступе к сайту регулярно добавьте его к рабочему списку каталога для более быстрого доступа. Войдите в меню Command - Каталог Hotlist - добавляет или вводом его, или если Вы уже соединены в панели, просто Добавьте Текущий. Получите доступ к списку с Ctl +\. [2]
Я думаю Ваш, уже открывают Ваши прекрасные файлы, но они находятся в отдельных буферах, и необходимо использовать :bn
(или полный :bnext
и :bprev
) команды для навигации к следующим и предыдущим буферам в данной области.
Я попробовал бы ':e #', который возвращается к файлу, ранее открытому.
В комментарии Вы спросили следующее:
Существует ли способ сделать это циклом только через файлы, которые были в той области (не, каждый файл в настоящее время открывается)?
Я не думаю, что Vim отслеживает все буферы, к которым ранее получило доступ окно (“область”). Однако Vim является scriptable …
Вот реализация, которая обеспечивает версию этой функциональности при помощи автокоманд для записи (в локальной переменной окна), которым были буферы, активируются в окне.
(Сокращенные) команды:
:Hb
Перечислите исторические буферы для этого окна.:Hbn[!] [N]
Переключитесь на Энный следующий исторический буфер.:bn
, но ограниченный “историческими” буферами текущего окна):Hbp[!] [N]
Переключитесь на Энный предыдущий исторический буфер.:bp
, но ограниченный “историческими” буферами текущего окна):Hbf [N]
(“забудьте”) Удаляют текущий буфер (или буферизуйте номер 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