Как я могу редактировать несколько файлов в VIM?


169

Я знаю, что могу открыть несколько файлов с vimпомощью чего-то вроде vim 2011-12*.log, но как я могу переключаться между файлами и закрывать файлы по одному? Кроме того, как я могу сказать имя текущего файла, который я редактирую?


Ответы:


172

Прежде всего, в vim вы можете ввести :(двоеточие), а затем help help, аля :helpсписок тем самопомощи, включая краткое руководство. В списке тем наведите курсор на интересующую тему, а затем нажмите, ctrl]и эта тема будет открыта.

Хорошее место для вас будет тема

|usr_07.txt|  Editing more than one file

Хорошо, к вашему ответу.

После запуска vim со списком файлов, вы можете перейти к следующему файлу, введя :nextили :nдля краткости. :wnextсокращение для записи текущих изменений, а затем перейти к следующему файлу.

Там тоже аналог :previous, :wpreviousи :Next. (Обратите внимание, что :pэто сокращение для :print. Сокращение для :previousэто :prevили :N.)

Чтобы увидеть, где вы находитесь в списке файлов, введите, :argsи файл, который в данный момент редактируется, появится в [](скобках).

Пример:

vim foo.txt bar.txt
:args

результат:

[foo.txt] bar.txt

25
: wn - это сокращение от: wnext.
Kowh

Вы также можете сделать: rew, чтобы вернуться к первому файлу. : e # переключает между 2 файлами. : п! идет к следующему файлу без записи. Также посмотрите на: установить автозапись.
Саскиха

4
Относительно нескольких буферов / окон / вкладок см. Также StackOverflow. Как эффективно работать с несколькими файлами в Vim? и использование вкладок Vim, таких как буферы .
mmoya

1
Глава 22 «Поиск файла для редактирования» также оказалась очень полезной. Он использует обозреватель каталогов для редактирования файлов, которые вы хотите.
Гарри Морено

wn офигенный
Раммайур

54

Вы можете открыть другой файл, когда vim открыт, :tabe filenameи переключиться на другой файл, который вы набираете, :tabnили :tabpдля следующего и предыдущего соответственно.

Сочетания клавиш gT и gt также можно использовать для переключения вкладок, когда вы не находитесь в режиме редактирования (т.е. не в режимах вставки, замены и т. Д.). В некоторых системах Ctrl+ Alt+ Page Upи Ctrl+ Alt+ Page Downтакже допускается переключение табуляции, но это не всегда работает (например, оно не будет работать в терминале OS X «из коробки»).

И вы можете увидеть имя файла в верхней части приложения VIM.


16
Этот. Также открывайте файлы во вкладках с помощью:vim -p file1 file2
Не сейчас

AMAZE! Я никогда не сталкивался с этим раньше, несмотря на то, что использовал vim годами. Это меняет все .
me_and

Обратите внимание, что вкладки не предназначены для работы с несколькими файлами. Они предназначены для работы с несколькими макетами . Смотрите статью .
patryk.beza

5
Если вы уже в vim и хотите добавить другой файл, вы можете использовать: :argadd filenameи затем :nextк нему. Кроме того, вы можете использовать, :argdel filenameчтобы удалить один из файлов в редактировании.
Luv2code

36

Команды для переключения между буферами:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.

:help buffer найти больше информации

Чтобы узнать имя файла используйте Ctrl+ G, :fileили:f


1
:bwзакрыть файл хаха. Не забудьте прочитать справку, :bwгде говорится, что вы должны использовать ее, только если знаете, что делаете. Это не имеет большого значения, но если вы не хотите стереть все отметки и информацию о файле, лучше использовать :bdили :qкак обычный человек
Дилан

1
Дополнительная информация на :bwслучай, если вам интересно: vi.stackexchange.com/questions/2212/…
wisbucky

26

Другой вариант, помимо ответов, состоит в том, чтобы разделить окно:

:sp
:vsp

:vspдля вертикального разделения. Затем используйте Ctrl+W <ARROW_KEYS>для перемещения по панелям.


4
Вы можете использовать :vsвместо:vsp
Khaja Minhajuddin

2
Или даже только Ctrl+W, vдля вертикального разделения и Ctrl+W, sдля горизонтального разделения.
Руслан

1
Я использую в CTRL+Wтечение многих лет, и в последнее время я много редактирую VI на веб-страницах. Каждый раз, когда я набираю команду, даже не задумываясь и ... вау ... вкладка браузера пропала! Я постоянно забываю. Мне действительно нужно выучить новый ярлык.
Jeach


10

Я задал похожий вопрос в суперпользователе,

"Как скопировать и вставить между различными окнами bash и файлами, открытыми с помощью VI?"

Ответ на мой вопрос был, что вы не можете, но вы можете открыть два файла в одном окне bash, используя :splitкоманду VIM :

  1. Откройте файл с помощью $ vim file1, откройте второй файл в VIM с помощью :split file2команды.
  2. Или используйте $ vim -o file1 file2из Bash.
  3. Переключение между файлами - переключение активного файла - в VIM с помощью ctrl- w ctrl- w.
  4. Примером операции является копирование (или восстановление) в файл1 yy, переключение (3), а затем вставка (или помещение) pсодержимого в файл2.
  5. Все остальное нормально, когда какое-либо окно активно, поэтому :qзакрывается и :q!принудительно завершается.

Мой bash черно-белый, поэтому имя файла каждого экрана оформляется в виде перевернутой «выбранной» строки с указанным там именем файла.

Woot!


6

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

vim -p file1.txt file2.txt

Или, если у вас уже открыт vim, вы можете открыть новый файл на новой вкладке, например:

:tabe file2.txt

Открыв вкладки, используйте gtдля просмотра следующей вкладки и gTпросмотра предыдущей вкладки.

Вы также можете перейти к первой вкладке с помощью 1gt, второй вкладке с помощью 2gtи т. Д.

Вы можете закрыть вкладки, используя :tabc

Наконец, вы можете переместить текущую вкладку в ту nпозицию, :ntabmгде nлюбое число больше или равно 0.


6
argadd a/b c/d e/f

argadd ...добавит все файлы в args, а также в :ls/ :buffersи позволит вам редактировать их.


Смотрите :h arglsit& :h argedit&:h argsd


Кроме того, вы можете выполнять определенные действия только с аргументами :argdo ..., и вы можете начать заново с аргументами, выполнив :argsd*.


0

Есть много способов сделать это. Первый, возможно, менее удобный, это вызов vimфайлов, которые вы хотите отредактировать - создать:

vim first_file second_file ...

Он вызывает два файла в двух буферах. Чтобы переключиться из одного файла в другой, используйте :nи :N. Чтобы вывести список файлов, которые вы редактируете, :argsсделаем работу. :help bufferпоможет вам больше в этом.


Это должно ответить на ваш вопрос. Но вот больше информации:

Есть способ отредактировать ваши файлы более удобным способом, разделив экран консоли с помощью vim . Для этого откройте два кадра с помощью :split( :sp) или :vsplit( :vs) при использовании vim . Затем перемещайтесь в этих кадрах, используя комбинацию Ctrl+ W> Ctrl+ W. Вы также можете использовать Ctrl+ W+ стрелку или клавишу ( H, J, Kили L) , соответствующую следующий кадр. Когда это будет сделано, отредактируйте нужный файл :e file_name. :help opening-windowпоможет вам больше в этом.

Теперь, если вы хотите увидеть различия между файлами, используйте -dаргумент или вызовите программу vimdiff (она одинакова) с соответствующими файлами. :help diffпоможет вам больше в этом.

vim -d first_file second_file ...

Пожалуйста, дайте мне знать, если у вас есть проблемы.


0

Мне нравится использовать раздельные окна - как горизонтальные, так и вертикальные - для редактирования нескольких файлов.

Я использую tmux для более легкого управления этими окнами

https://tmux.github.io/ «Что такое терминальный мультиплексор? Он позволяет легко переключаться между несколькими программами в одном терминале, отсоединять их (они продолжают работать в фоновом режиме) и подключать их к другому терминалу. намного больше. См. руководство. "

Пример: просмотр файлов или выполнение тестов справа, редактирование тестовых и исходных файлов слева: введите описание изображения здесь


0

:e #(filename) переключаться между двумя открытыми файлами

:p для предыдущего файла

:n для следующего файла


Добро пожаловать в U & L, это вряд ли что-то добавит к другому ответу, опубликованному несколько лет назад.
Архемар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.