В последнее время я резко сократил количество используемых плагинов, поэтому я ищу ответы, используя только встроенные функции Vim.
Я заметил недостаток в моем рабочем процессе, когда я редактирую много буферов: я нахожусь в буфере, и я хочу переключиться на другой, который я не помню имя, и который не является альтернативным буфером , Таким образом, использование :b#
невозможно, и использование завершения с командой также :b
не удобно.
Для этого я делал следующее:
- Сначала используйте,
:buffers
чтобы получить список открытых буферов - Запомните номер буфера, который я хочу использовать
- Нажмите, Enterчтобы закрыть список буферов
- Использовать
:bX
сX
номером используемого буфера.
Этот рабочий процесс показался мне довольно тяжелым, поэтому я добавил следующие строки в свой
.vimrc
:
" Improve the navigation in the buffers
nnoremap <Leader><S-b> :B<CR>
command! B call Buffers()
function! Buffers()
execute "buffers"
let buffer=input("Enter a buffer:")
execute "b" . buffer
endfunction
Это дает мне команду :B
(и отображение), которая вызывает функцию, :buffers
ожидает ввода и, наконец, вызывает, :b
а затем вводит.
Это работает хорошо, но я удивлен, что мне пришлось разработать такую функцию: обычно Vim имеет довольно эффективный рабочий процесс по умолчанию, поэтому мне интересно, есть ли лучший способ переключиться на буфер, из которого я не знаю ничего, кроме что это уже было открыто в моей сессии редактирования.
:ls
после:b#
(не нужно сначала нажимать return или escape, можно перейти непосредственно из списка буферов в 'ls'.) (Публикация в виде комментария, потому что он не кажется достаточно существенным, чтобы быть ответом? Также интересно, если я что-то:b#
это не то, что я ищу, но да, тот факт, что вы можете сохранить нажатие клавиши, введя напрямую,:b
не нажимаяenter
раньше, интересен. (На самом деле это может быть слишком легко, чтобы быть ответом, но это стоило комментировать :-))#
символ в качестве замены (буферного) числа, а не буквальный#
символ.Ответы:
Наоборот, я считаю завершение табуляции чрезвычайно удобным. Установка правильных опций для значений, которые работают для вас, может сильно помочь. Вот соответствующие строки из моего
vimrc
(они работают для меня, но они могут не работать для вас, поэтому не просто скопируйте их) :При этом правильный буфер редко находится на расстоянии более пяти или шести нажатий клавиш:
Барри Артур несколько лет назад придумал гораздо более простое решение, которое с тех пор стало довольно популярным:
из которых я предложил несколько более универсальный вариант пару лет назад:
Поскольку мы говорим на vimscript, я написал хорошую функцию, которая «автоматически заполняет» командную строку правильной заглушкой команды после команд типа списка, таких как
:ls
или:ilist
. Преимущество этой функции перед приведенными выше сопоставлениями заключается в том, что мне не нужно запоминать конкретные сопоставления. Это работает так же, как Vim, но с небольшим поворотом .Тем не менее, я большой сторонник "символьной навигации" над "файловой навигацией". Когда это применимо, навигация на основе символов намного быстрее и экономичнее, чем навигация на основе файлов.
Кстати, последний GIF показывает одно из средств навигации по символам. Пример глупый, но ... да ладно.
источник
wild*
опциями, я постараюсь настроить его по-своему. Что касается решения Барри Артура, то оно довольно близко к интересному ответу @ nobe4. Наконец, мне нужно более глубоко взглянуть на вашуCCR()
функцию, чтобы действительно получить ее, но она выглядит многообещающей. Спасибо за Ваш ответ.Я столкнулся с той же проблемой некоторое время назад, и я нашел решение:
Это откроет список буферов и, не скрывая его, даст вам возможность переключать буфер.
Я думаю, что имеет смысл, что у Vim здесь нет опции «список и выбор», это два отдельных действия. Но Вим достаточно силен, чтобы объединить команду.
Думайте об этом как о философии Unix: делай одно и делай это хорошо.
:buffers
перечисляет буферы и:buffer xxx
позволяет выбрать один.источник
Но совсем недавно я обнаружил, что самый быстрый метод с наименьшим количеством нажатий клавиш - это использовать:
{count} CTRL-^
Это не так уж и отличается,
:b#<Enter>
но, как вы говорите, вам нужно знать номер буфера!Для этого я запустил плагин MiniBufExplorer , который отображает список имен файлов сверху (как почти любой другой редактор). Я уверен, что есть множество альтернатив.
Наконец, поскольку Ctrl-^мои пальцы немного растягиваются, и это очень распространенная операция, я перенес ее на Ctrl-E. Реализация для этого не слишком сложна:
Итак, мой текущий процесс переключения буфера происходит примерно так:
К сожалению, MBE и приведенный выше скрипт не являются встроенными в Vim, как вы и просили. Когда я на удаленной машине без конфигурации, я просто использую
:b [partial]
и Tab-завершение.источник