Як я можу редагувати кілька файлів у VIM?


167

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


Відповіді:


170

Перш за все, в vim ви можете ввести :(двокрапка), а потім допомогти help, ala :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

24
: wn - коротка форма: wnext.
Ков

Ви також можете зробити: rew, щоб повернутися до першого файлу. : e # міняється між двома файлами. : n! переходить до наступного файлу без запису. Також подивіться на: встановити автозапис.
Саскіха

4
Стосовно декількох буферів / вікон / вкладок також див. Статтю StackOverflow Як ефективно працювати з кількома файлами у Vim? та Використання вкладок Vim, як буфери .
mmoya

1
Я вважав, що глава 22 "Пошук файлу для редагування" також дуже корисний. Він переходить за допомогою програми провідника каталогу для редагування потрібних файлів.
Гаррі Морено

: wn awesome.
rammayur

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

25

Ще один варіант, окрім наведених відповідей, - розділити вікно на:

:sp
:vsp

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


4
Ви можете використовувати :vsзамість:vsp
Khaja Minhajuddin

2
Або навіть просто Ctrl+W, vдля вертикального розщеплення і Ctrl+W, sдля горизонтального розколу.
Руслан

1
Я використовую CTRL+Wпротягом багатьох років, і останнім часом я багато редагую VI на веб-сторінках. Кожен раз я набираю команду, навіть не замислюючись і ... whammmm ... вкладка браузера GONE! Я забуваю. Мені справді потрібно вивчити новий ярлик.
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 чорно-білий, тому ім'я файлу кожного екрану оформлено у вигляді зворотного "обраного" рядка із вказаним там ім'ям файлу.

Вуто!


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 ...додасть усі файли до аргументів, а також до :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.