Как эффективно работать с несколькими файлами в Vim? - PullRequest
1046 голосов
/ 10 сентября 2008

Я начал использовать Vim для разработки сценариев Perl и начинаю находить его очень мощным.

Мне нравится то, что я могу открывать несколько файлов одновременно, например, vi main.pl maintenance.pl и затем прыгайте между ними с помощью:

:n
:prev

и посмотрите, какой файл открыт с

:args

А чтобы добавить файл, я могу сказать:

:n test.pl

, который я ожидаю, будет добавлен в мой список файлов, но вместо этого он стирает мой текущий список файлов, и когда я набираю :args, у меня открывается только test.pl.

Так, как мне ДОБАВИТЬ и УДАЛИТЬ файлы в моем списке аргументов?

Ответы [ 27 ]

1117 голосов
/ 10 сентября 2008

Почему бы не использовать вкладки (представленные в Vim 7)? Вы можете переключаться между вкладками с :tabn и :tabp, С :tabe <filepath> вы можете добавить новую вкладку; и с обычной :q или :wq вы закрываете вкладку. Если вы сопоставите :tabn и :tabp с вашими F7 / F8 клавишами, вы можете легко переключаться между файлами.

Если файлов не так много или у вас нет Vim 7, вы также можете разделить экран на несколько файлов: :sp <filepath>. Затем вы можете переключаться между разделительными экранами с помощью Ctrl + W и затем стрелкой в ​​направлении, которое вы хотите переместить (или вместо клавиш со стрелками, w для следующего и Ш для предыдущего разделенного экрана)

531 голосов
/ 10 сентября 2008

Листинг

Чтобы увидеть список текущих буферов, я использую:

:ls

Открытие

Чтобы открыть новый файл, я использую

:e ../myFile.pl

с улучшенным завершением табуляции (поместите set wildmenu в свой .vimrc).

Примечание: вы также можете использовать :find, который будет искать набор путей для вас, но сначала вам нужно настроить эти пути.


Переключение

Для переключения между всеми открытыми файлами я использую

:b myfile

с улучшенным завершением табуляции (по-прежнему set wildmenu).

Примечание: :b# выбирает последний посещенный файл, поэтому вы можете использовать его для быстрого переключения между двумя файлами.


Использование Windows

Ctrl-W s и Ctrl-W v для разделения текущего окна по горизонтали и вертикали. Вы также можете использовать :split и :vertical split (:sp и :vs)

Ctrl-W w для переключения между открытыми окнами и Ctrl-W h (или j или k или l) для навигации по открытым окнам.

Ctrl-W c, чтобы закрыть текущее окно, и Ctrl-W o, чтобы закрыть все окна, кроме текущего.

Запуск vim с флагом -o или -O открывает каждый файл в отдельном разделении.


При всем этом мне не нужны вкладки в Vim, и мои пальцы находят мои буферы, а не глаза.

Примечание: если вы хотите, чтобы все файлы передавались в один и тот же экземпляр Vim, запустите Vim с параметром --remote-silent.

221 голосов
/ 15 сентября 2008
:ls

для списка открытых буферов

  • :bp предыдущий буфер
  • :bn следующий буфер
  • :bn (n число) перейти к n-му буферу
  • :b <filename-part> с клавишей табуляции, обеспечивающей автозаполнение (круто !!)

В некоторых версиях vim bn и bp на самом деле bnext и bprevious соответственно. В этом случае полезно автоматическое заполнение вкладок.

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

Кроме того, вы можете сохранить сеансы VIM

:mksession! ~/today.ses

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

vim -S ~/today.ses

Нетрудно вспомнить, где вы остановились вчера. ;)

105 голосов
/ 10 сентября 2008

Для добавления в список args:

:argadd

Для удаления из списка args:

:argdelete

В вашем примере вы можете использовать :argedit test.pl, чтобы добавить test.pl в список args и редактировать файл за один шаг.

:help args дает гораздо больше деталей и расширенного использования

46 голосов
/ 10 сентября 2008

Я использую команды буфера - :bn (следующий буфер), :bp (предыдущий буфер) :buffers (список открытых буферов) :b<n> (открытый буфер n) :bd (удаление буфера). :e <filename> просто откроется в новый буфер.

38 голосов
/ 10 сентября 2008

Я думаю, что вы используете неправильную команду для просмотра списка файлов, которые у вас открыты.

Попробуйте сделать :ls, чтобы увидеть список файлов, которые у вас открыты, и вы увидите:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

Затем вы можете просматривать файлы, обращаясь к ним по указанным номерам, например, : 3b

или вы можете разделить экран, введя номер, но используя sb вместо b.

Aside% относится к видимому в данный момент файлу, а # относится к альтернативному файлу.

Вы можете легко переключаться между этими двумя файлами, нажимая Ctrl Shift 6

Редактировать: как и :ls, вы можете использовать :reg, чтобы просмотреть текущее содержимое ваших регистров, включая регистры 0-9, которые содержат то, что вы удалили. Это особенно полезно, если вы хотите повторно использовать ранее удаленный текст.

34 голосов
/ 10 сентября 2008

Vim (но не оригинальный Vi!) Имеет вкладки, которые я считаю (во многих контекстах) превосходящими буферы. Вы можете сказать :tabe [filename], чтобы открыть файл в новой вкладке. Переключение между вкладками осуществляется нажатием на вкладку или комбинациями клавиш [ n ] gt и gT. Графический Vim даже имеет графические вкладки.

25 голосов
/ 31 марта 2016

Здесь много ответов! То, что я использую, не изобретая велосипед - самые известные плагины (которые скоро не умрут и будут использоваться многими людьми) для сверхбыстрого и вызывающего.

  • ctrlpvim / ctrlp.vim - найти файл по имени, нечеткий поиск по его местоположению или только по имени
  • jlanzarotta / bufexplorer - для просмотра открытых буферов (когда вы не помните, сколько файлов вы открыли и изменили в последнее время, и вы не помните, где они находятся, вероятно, потому что вы искали их с помощью Ag)
  • rking / ag.vim для поиска файлов по gitignore
  • scrooloose / nerdtree для просмотра структуры каталогов, просмотра, добавления / удаления / изменения файлов

ОБНОВЛЕНИЕ : недавно я использовал dyng / ctrlsf.vim для поиска с контекстным представлением (например, Sublime search), и я переключил движок с ag на ripgrep . Выдающаяся производительность.

23 голосов
/ 08 декабря 2011

Такие вещи, как :e и :badd будут принимать только ОДИН аргумент, поэтому следующее не удастся

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Если вы хотите добавить несколько файлов из vim, используйте arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
17 голосов
/ 18 июня 2015

Некоторые ответы в этой теме предлагают использовать вкладки, а другие предлагают использовать буфер для достижения той же цели. Вкладки и буферы разные. Я настоятельно рекомендую вам прочитать эту статью Vim Tab Madness - Buffers vs Tabs

Вот хорошее резюме, которое я извлек из статьи:

Резюме:

  • Буфер - это текст файла в памяти.
  • Окно - это окно просмотра в буфере.
  • Закладка представляет собой набор окон.
...