Я понимаю, что ограничение себя ванильным Vim (без использования плагинов) ограничивает возможности редактора, но, поскольку я часто переключаюсь между разными машинами, часто слишком сложно перемещать свою среду повсюду. Я просто хочу остаться в ванильном Виме.
Что меня сдерживает, так это возможность быстро переключаться между файлами. Я (по крайней мере, полагаю) хорошо разбираюсь в буферах , окнах , вкладках , а также в netrw ( Vex
, Ex
и т. Д.).
Но в редакторе, таком как Sublime Text , я могу просто печатать ctrl- pи сразу оказываюсь у файла.
Я знаю, что могу перейти к оболочке, но мне интересно, есть ли какие-либо другие «скрытые» секреты быстрого переключения между файлами в Vim, основанные не только на имени файла.
Ответы:
Ближайший эквивалент («ближайший», а не «точный») для ST2 Ctrl+ P- это плагин, называемый, будьте готовы… CtrlP . Есть и другие похожие плагины, такие как Command-T или FuzzyFinder .
Я использую CtrlP, и мне это нравится, но я полностью поддерживаю ваше решение отказаться от плагинов. Это не самый простой способ, но в конечном итоге он окупится.
Открытие файлов
Самый простой способ открыть файл - это
:e /path/to/filename
. К счастью, вы получаете завершение табуляции и подстановочные знаки: классический*
и специальный**
, что означает «любой подкаталог».Объединив все это, вы можете:
выбрать из всех файлов, содержащихся
foo
в их имени, в рабочем каталоге или:для выбора из всех файлов, содержащихся
bar
в их имени, в любом подкаталоге, содержащемсяfoo
в его имени, в любом месте рабочего каталога.Конечно, это работает для
:tabe[dit]
,:sp[lit]
и:vs[plit]
, тоже.Однако эти команды ограничены одним файлом. Используйте
:next
для открытия нескольких файлов:и взгляните на
:help arglist
.Переход между буферами
:b[uffer]
это основная команда переключения буфера:Обратите внимание, что многие из этих команд и их родственники принимают счет.
Команда
:ls
показывает вам список загруженных буферов. Однако это немного «особенное»: при создании буферам присваивается номер, поэтому вы можете получить список, который будет выглядеть, как1 2 5
если бы вы удалили буферы. Да, это немного неудобно, и это делает переключение на буфер по его номеру слишком проблематичным. Предпочитайте переключение по частичному имени:b foo<Tab>
или циклическое переключение:bn :bp
.В любом случае, вот классное отображение, которое перечисляет все загруженные буферы и заполняет подсказку для вас, ожидая, когда вы наберете номер буфера и нажмете
<enter>
:С этим отображением переключиться на другой буфер так же просто, как:
или:
Идея исходит из этого изображения, взятого из коллекции инфографики Vim Байруи :
В Vim также есть
<C-^>
(или<C-6>
на некоторых клавиатурах) - эквивалент нормального режима - для переключения:b#
между текущим буфером и предыдущим. Используйте его, если вы часто переключаетесь между двумя буферами.Прочтите все о буферах в
:help buffers
.Перейти к декларации
Внутри файла вы можете использовать
gd
илиgD
.В рамках проекта функция «тегов» Vim - ваш друг, но вам понадобится внешний индексатор кода, например ctags или cscope. Самые простые команды - это
:tag foo
и<C-]>
с курсором на имени метода. Оба инструмента хорошо интегрированы в Vim: см:help tags
,:help ctags
и:help cscope
.Что бы это ни стоило, я широко использую навигацию по тегам для перемещения внутри проекта (в основном, используя CtrlP
:CtrlPTag
и:CtrlPBufTag
команды, но также и встроенные), и мой любимый «общий» метод переключения буфера - по имени.Развертывание вашей конфигурации
Многие пользователи Vim помещают свою конфигурацию в систему контроля версий, что позволяет очень быстро и легко установить собственную конфигурацию на новую машину. Подумай об этом.
РЕДАКТИРОВАТЬ
Несколько месяцев назад мне пришлось работать на удаленной машине с устаревшим Vim. Я мог бы установить подходящий Vim и клонировать свой любимый конфиг, но на этот раз я решил путешествовать налегке, чтобы «заточить пилу». Я быстро построил минимализм
.vimrc
и пересмотрел пару полузабытых нативных функций. После этого выступления я решил, что CtrlP не так уж необходим, и избавился от него: собственные функции и настраиваемые сопоставления не так привлекательны, но они выполняют свою работу без особых зависимостей.Жонглирование файлами
:find
действительно отличная команда, как только выset path
правильно сделаете . С моими настройками рекурсивно,ffoo<Tab>
найдет все файлы, содержащиесяfoo
в текущем каталоге. Это быстро, интуитивно понятно и легко. Конечно, я выигрываю от того же завершения и подстановочных знаков, что и с:edit
друзьями.Чтобы сделать процесс еще быстрее, следующие сопоставления позволяют мне пропускать целые части проекта и рекурсивно находить файлы в каталоге текущего файла:
ПРЕДУПРЕЖДЕНИЕ!
path
Вариант чрезвычайно мощный. Значение выше -.,**
- работает для меня, но для языков, которые я использую, нет стандартной библиотеки. Правильное значение полностью зависит от ваших потребностей.Жонглирование буферами
Приведенные выше сопоставления перечисляют доступные буферы в «wildmenu» с пустой подсказкой, что позволяет мне либо перемещаться по меню,
<Tab>
либо вводить несколько букв и<Tab>
снова сужать список. Как и в случае с отображением файлов выше, процесс выполняется быстро и практически без проблем.Эти сопоставления говорят сами за себя.
Жонглирование тегами
Это сопоставление использует поиск по регулярному выражению вместо поиска по всему слову, поэтому я могу
,jba<Tab>
найти тегfoobarbaz()
.Да, нечеткое сопоставление вызывает привыкание, но вы можете работать и без него. И за небольшую часть стоимости.
БОЛЬШЕ ИЗМЕНИТЬ
Пара дополнительных советов / хитростей…
Параметры Wildmenu
"Wildmenu", доступный с
set wildmenu
, упрощает навигацию по файлам / . Его поведение регулируется рядом параметров, которые стоит изучить:wildmode
сообщает Vim, как должно вести себя "wildmenu":wildignore
отфильтровывает весь мусор:wildignorecase
позволяет искатьfoo
и находитьFoo
:Метки файлов
Я недавно нашел этот камень у кого-то другого
~/.vimrc
. Он создает метку файла в точном положении курсора всякий раз, когда вы покидаете буфер, так что, где бы вы ни находились,'J
переходите к последнему буферу JavaScript, который вы редактировали. Потрясающие.источник
:e
но я буду использовать это много теперь. Я восхищаюсь работой, которая попала в Ctrl-P, и могу многому у нее научиться, но у меня это не сработало. Я обнаружил, что это немного вялый и, как таковой, прерывает ход моих мыслей во время работы (может быть моя система, мои настройки, я сам, но я не исследовал)**
действительно здорово.gb
карту. Еще один, которым я буду часто пользоваться. Все буферные плагины, которые я пробовал (CtrlP, bufExplorer, ...) , не так быстры, как этот ( конечно, они предлагают больше функциональности, но недостаточно для меня, чтобы продолжать их использовать) .Ответ во многом зависит от ваших предпочтений и обстоятельств. Некоторые примеры:
<C-^>
это очень удобно. В общем, альтернативный файл - важное понятие.:split
решает проблему определения местоположения буфера из местоположения окна (после того, как вы открыли все буферы). Ты можешь использовать[N]<C-w><C-w>
для быстрого переключения на него.:[N]b[uffer]
и:[N]sb[uffer]
команды очень удобно;:ls
сообщает вам числа.Плагины (или, по крайней мере, настраиваемые сопоставления) могут значительно улучшить ситуацию, и на vim.org по этой теме есть множество разнообразных . Существуют различные механизмы распространения вашей конфигурации (Pathogen + GitHub, Dropbox, ...), или вы можете удаленно редактировать файлы сервера через плагин netrw, который поставляется с Vim.
источник
mA
для сохранения отметкиA
и `` A '' для возврата. Я нахожу netrw намного более полезным после того, как узнал,:Rex
какой из них возвращается в проводник.:b
,:e
и многие другие могут использовать подстановочные знаки, такие как*
и**
. Команда:b
может принимать частичное имя файла. Объедините это с<c-d>
или wildmenu, вы можете далеко продвинуться. Что касается плагинов, вы можете использовать что-то специфичное для домена, например rail.vim, который предоставляет специальные навигационные команды для рельсов или что-то более общее, например CtrlP.Иногда также удобно просматривать список файлов последовательно (например, если вы сделали что-то вроде
vim *.php
открытия нескольких файлов одновременно). Затем вы можете использовать:n[ext]
(а также:prev[ious]
,:fir[st]
и:la[st]
) для навигации (в дополнение к тому , что было предложено в других ответов).источник
Вы можете выполнить завершение табуляции с подстановочными знаками в командной строке без каких-либо плагинов. например
позволит вам перебрать все файлы, начинающиеся с 'foo' в дереве каталогов в ./src, и выбрать тот, который вы хотите отредактировать.
Если вы уже редактировали файл, но он все еще находится в буфере, вы можете переключиться на него с помощью:
который будет циклически проходить через все буферы с 'foo' в пути. Вам может потребоваться установить параметры wildmode и wildmenu, чтобы получить желаемое поведение. у меня есть
в моем .vimrc.
источник
Если вы выбрали имя файла и хотите перейти к этому файлу,
gf
мы сделаем это за вас. Мне также нравится использовать ctags , который не является плагином; вы просто создаете теги и можете легко перемещаться по своей кодовой базе.источник
Если вы хотите переключаться между файлами в редакторе vim, см. Ответ ниже
Первое нажатие
Esc
чтобы выйти из режима редактирования.Затем введите
:e
чтобы проверить текущий путь к файлу.если вы хотите перейти к другому файлу, введите
:e /path-of-file.txt/
используя его, вы можете переключиться.Если вы хотите перейти к предыдущему файлу, просто введите,
:e#
чтобы переключиться на предыдущий путь к файлу.источник
У меня была такая же проблема с Vim.
Меньше всего я хочу полагаться на плагины для такой рутинной задачи, как переключение файлов.
Я добавил следующие строки в
.vimrc
И БАМ! Теперь я могу,
:find any/filename/in/any/folder/
пока vim находится в корневом каталоге проекта. Вкладка доработка работает. Подстановочные знаки работают!Когда файлы уже открыты и в фоновом режиме имеется множество буферов (вы можете использовать их
:ls
для просмотра всех буферов), при запуске выполняется:b any/file <TAB>
нечеткий поиск всех буферов и выполняется переход к требуемому файлу. Если он не уникален, появится дикое меню вкладок (следовательно, вторая строка в .vimrc), которое можно выбрать с помощью вкладки.Мой ответ исходит из этого потрясающего видео
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
Здесь есть еще уловки, и я рекомендую его посмотреть.
источник