vim редактирование / переключение между несколькими файлами эффективно в больших структурах каталогов

11

Я ни в коем случае не опытный пользователь vim, я только начинаю понимать продвинутые движения и команды с помощью vim. Но есть один недостаток, который я не могу обойти.

Я вырос с графическими программами для написания кода, но я только недавно начал использовать vim over ssh & screen для работы над довольно большими проектами со многими папками.

Мне любопытно, что делают мастера vim для быстрой и простой работы с несколькими файлами. Рассмотрим приложение rails в качестве примера. Скажем, вы хотите отредактировать контроллер, чтобы запустить.

vim app/controllers/controller.rb

Но затем вы быстро захотите перейти к редактированию представления или миграции базы данных, мой первый инстинкт - :wqвернуться к bash, чтобы перейти к этому каталогу, и снова запустить vim в совершенно новом буфере.

Это, очевидно, совершенно неправильно.

Я узнал о нескольких вещах, таких как:

  • Клиентский сервер (но я не хочу использовать X поверх ssh, и это кажется единственным способом)
  • :eоткрыть другой файл, просматривая, но я не могу сделать это очень быстро. Закладка завершена, действительно, сбивает меня с толку.
  • Открытие всего каталога и поиск в буферах.
  • NERDTree многообещающе, но я действительно хочу держаться подальше от любого графического представления, чтобы заставить меня освоить навигацию командной строки

Я извиняюсь за то, что был наивен, но я действительно хочу выучить правильный путь, даже если это очень субъективно.

Какие у вас методы и что бы вы порекомендовали?

ФЕБО
источник
В частности, для Ruby on Rails в плагине Tim Pope rails.vim есть несколько хороших команд (с дополнением; расширяемые для новых иерархий) для открытия файлов для моделей / представлений / контроллеров / миграций / tests /… (см. rails-type-navigationВ документации или :help rails-type-navigationкогда вы установить его).
Крис Джонсен

Ответы:

7

Можно настроить vim для редактирования нескольких файлов без необходимости вообще завершать работу. Вы используете несколько буферов и переключаетесь между ними. Поскольку вы используете vim на экране, вы можете включить следующее в ~ / .vimrc, чтобы включить это.

   set hidden
   syntax enable
   source $VIMRUNTIME/menu.vim
   set wildmenu
   set cpo-=<
   set wcm=<C-Z>
   map <F4> :emenu <C-Z>
   nmap <Esc>[5D :bp<CR>
   nmap <Esc>Od  :bp<CR>
   nmap <Esc>OD  :bp<CR>
   nmap <Esc>[5C :bn<CR>
   nmap <Esc>Oc  :bn<CR>
   nmap <Esc>OC  :bn<CR>
   nmap <Esc>[3~ :bd<CR>
   nmap ZZ :bd<CR>

Эти сопоставления клавиш отображаются на клавиши со стрелками Ctrl-Left и Right для переключения между буферами. Клавиша F4 вызывает то же меню, которое отображает графический интерфейс. Нажатие вкладки также теперь отображает небольшое меню для выбора завершения при нажатии вкладки.

Кит
источник
Очень хороший совет, эти три ответа действительно помогли мне чувствовать себя более комфортно. Хорошее управление буфером без плагинов - отличный навык. Люблю дикое меню!
Фев
5

Хах! Раньше я был точно таким же, как ты, поэтому я точно знаю , откуда ты. Даже теперь, когда я знаю, что я делаю в определенной степени (я не очень-то бог, но я надеюсь попасть туда), я все равно иногда делаю: wq и возвращаюсь к своей оболочке.

Проверьте это - это может помочь вам. (Это тоже поможет мне, так как я никогда не знал об этом. Вот что удивительно в сайтах stackexchange - вы учитесь, помогая другим учиться!)

Вот несколько вещей, которые я делаю.

  1. :eКоманда. Внутри vim, при редактировании файла, вы можете сделать что-то подобное, :e dir/subdir/otherfileи он откроет его в новом буфере, то есть у вас будет два открытых файла одновременно.

  2. Ctrl-Shift-6(Не знаю фактических значений ASCII). Если у вас открыто два буфера, вы можете переключаться между ними мгновенно с помощью этого переключателя.

  3. bdудаление буфера. Позволяет очистить буфер.

  4. Это действительно очень удобно :sh. Если по какой-либо причине вам нужно вернуться в оболочку (скажем, посмотреть каталог и выполнить chmod файл), вы можете вызвать команду оболочки vim, сделав именно это. Выход из оболочки возвращает вас туда, где вы были в vim.

  5. В той же категории, что и вышеперечисленные, :!эта команда и команда unix впоследствии выполнят эту команду. Попробуйте это с ls. (Я думаю, что это также работает со встроенными командами оболочки, но я не уверен.)

Это те, которые я использую все время. Также есть :nдля следующего и :pдля предыдущего файла, так как в vim может быть открыто более двух буферов одновременно (хотя обычно я этого не делаю).

lunchmeat317
источник
Огромное спасибо за эти советы. Я также нашел это: wincent.com/products/command-t . Мне надо начать его использовать. Единственный недостаток в том, что вам нужен ruby ​​(не очень дружелюбный по ssh), но это именно то, что я искал. Это в сочетании с :sh, :eи надлежащее управление буфером, и вещи становятся сексуально
ФЕБО
В большинстве оболочек (т.е. оболочек с заданием управления) Ctrl+Zследует приостановить процесс ( fgиз оболочки, чтобы отобразить его снова) - что является альтернативой :sh.
maxschlepzig
Еще один отличный совет! Превосходно! Я должен скомпилировать их в блоге или что-то в этом роде.
Фев
2

Вот где вы начинаете использовать плагины . Для управления файлами (или буферами) NERD-дерево и MiniBufExplorer являются общими вариантами. В вашем случае я бы гуглил " vim ruby ​​ide " и следовал одному из множества учебных пособий, которые я нашел. Я использую Python, и 3 команды в этом руководстве настраивают все, что мне нужно, из Vim.

phunehehe
источник
2

Я также рекомендовал бы использовать разделенные окна для просмотра нескольких файлов одновременно. Добавьте некоторые навыки с помощью Buffer и Window management в VIM, и вы сразу станете ниндзя VIM.

Для получения актуальной документации я отошлю вас к Документации VIM для Windows , но постараюсь дать вам преимущество.

Запустите VIM с 2 (или более) горизонтально разделенными окнами, верхнее окно имеет файл1, следующее окно внизу имеет файл2 и т. Д.

vim -o <file1> <file2> (file3 file4 ...)

Запустите VIM с 2 (или более) вертикально разделенными окнами, в крайнем левом окне находится файл1, в следующем - файл2 и т. Д.

vim -O <file1> <file2> (file3 file4 ...)

Переместить курсор в другое окно:

CTRL-W <vim direction key> (h=left, j=up, k=down, l=right)

Уже редактируете один файл, но хотите разделить окно и отредактировать другой файл:

:split <file2>
:vsplit <file2>

Для горизонтального и вертикального разделения соответственно.

Есть также команды для перемещения окон, изменения их размера и т. Д.

5mi11er
источник
1

Используйте команду vi: split, чтобы открыть второе окно редактирования. split может выполнять как горизонтальное, так и вертикальное разбиение и более двух одновременно. У меня было 10 открытых файлов за один сеанс vi.

wesmat
источник