Откройте другой файл с окнами с несколькими панелями и переключатель между ними

В фаворитах MC или закладках хранятся в каталоге рабочего списка.

Hotlist

Команда рабочего списка Каталога показывает маркировки каталогов в рабочем списке каталога. Полуночный Командующий изменится на каталог, соответствующий выбранной маркировке. От диалогового окна рабочего списка уже можно удалить созданных пар маркировки/каталога и добавить новые. Для добавления новых каталогов быстро можно использовать Добавление к команде рабочего списка (Ctl+x, h), который добавляет текущий каталог в рабочий список каталога, прося только маркировку для каталога.

Это делает CD к часто используемым каталогам быстрее. Можно рассмотреть использование переменной CDPATH, как описано во внутреннем описании команды CD. [1]

Можно также использовать рабочий список для хранения FTP-сайтов, к которым часто получают доступ: при доступе к сайту регулярно добавьте его к рабочему списку каталога для более быстрого доступа. Войдите в меню Command - Каталог Hotlist - добавляет или вводом его, или если Вы уже соединены в панели, просто Добавьте Текущий. Получите доступ к списку с Ctl +\. [2]

  1. http://linux.die.net/man/1/mc

  2. http://www.trembath.co.za/mctutorial.html

3
22.07.2011, 01:50
3 ответа

Я думаю Ваш, уже открывают Ваши прекрасные файлы, но они находятся в отдельных буферах, и необходимо использовать :bn (или полный :bnext и :bprev) команды для навигации к следующим и предыдущим буферам в данной области.

5
27.01.2020, 21:13
  • 1
    Существует ли способ сделать это циклом только через файлы, которые были в той области (не, каждый файл в настоящее время открывается)? –  Matt 22.07.2011, 02:34
  • 2
    Without некоторая система соответствия Ваших собственных буферных маркировок использования, я не думаю так. Это не работает в Вашем исходном примере также. Все открытые файлы в энергии находятся в ряде буферов, который не имеет никакого конкретного отношения к областям, у Вас есть установка. Используя следующие/предыдущие циклы команд через буферы. Вы могли вручную настроить это путем установки макросов для определенных буферов. –  Caleb 22.07.2011, 12:41

Я попробовал бы ':e #', который возвращается к файлу, ранее открытому.

1
27.01.2020, 21:13

В комментарии Вы спросили следующее:

Существует ли способ сделать это циклом только через файлы, которые были в той области (не, каждый файл в настоящее время открывается)?

Я не думаю, что 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
1
27.01.2020, 21:13

Теги

Похожие вопросы