LINUX.ORG.RU

vim для самых маленьких

 , ,


14

5

Основные команды текстового редактора vim

Итак, в вашей жизни случилось так, что вам нужно отредактировать какой-нибудь файл конфигурации, заполнить комментарий коммита git или написать подобную заметку с использованием разметки markdown. И в вашем распоряжении оказался редактор vim или vi то откройте терминал и введите vimtutor и не читайте дальше эту простыню. Мотайте в самый низ, если вам нужно просто открыть, отредактировать, закрыть файл и забыть.

Для базового взаимодействия с этим мощным редактором нужно знать что…

В редакторе есть два режима — обычный и режим ввода:

  • esc переводит вас в командный режим из режима ввода;
  • i или a переводит вас из командного режима в режим ввода.

В режиме ввода вы просто редактируете текст, как в любом текстовом редакторе.

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

Командный режим делится на:

  • клавиатурный, то есть после нажатия Esc вся клавиатура превращается в набор хоткеев;
  • режим командной строки, когда вы вводите текстовые команды которые исполняет редактор.

В клавиатурном режиме вы можете например нажать:

  • dd тем самым удалив строку на котором есть курсор;
  • u отмотать редактирование назад.

Команды выделения, копирования и вставки:

  • ctrl + v или shift + v выделить текст;
  • y скопировать выделенный текст;
  • p вставить выделенный текст.

Так, как описано выше, копирование и вставка работают только внутри vim.

Внешний текст вы можете вставить, нажав на колёсико мышки. Или:

  • esc — переходим в командный режим;
  • жмём shift + ", затем жмём отдельно клавишу +, затем отдельно p.

Для копирования в системный буфер обмена — то же самое с y в конце:

  • esc переходим в командный режим;
  • Вместе жмём shift и " затем жмём отдельно клавишу + затем отдельно y

Символ " там где буква э. По описанию сложно, на деле всё нажимается легко.

В режим командной строки перейти надо так:

  • нажать esc;
  • затем нажать shift + ; (там где буква ж)

Теперь можно ввести команды:

  • e имя_файла.txt создать и открыть для редактирования новый файл e (от слова edit, редактировать — понимание того, как образуются сокращения поможет вам в запоминании и вспоминании команд);
  • set syntax=on включить подсветку кода;
  • set mouse=a включить полную поддержку мыши;
  • vs разделить окно вертикально;
  • sp разделить окно горизонтально;

Горизонтальное и вертикальное разделение окон очень удобно, если вам нужно писать в одной части файла и что-то почитывать в другом конце или другом файле.

  • q закрыть текущий файл или/и разделённую область редактирования.
  • ter открыть терминал прямо в редакторе.
  • !command запустить программу прямо из редактора например !ls.

Выполнение команд из редактора бывает очень полезным например вам нужен файл со списком файлов в текущем каталоге.

  • esc;
  • shift + ; (там где буква ж)
  • e list.txt или просто нажать клавишу e на клавиатуре, а не вводить команду e list.txt.
  • .!ls вставить вывод команды в файл в строку с курсором с заменой строки если она что-то содержала.
  • 4!ls тоже самое что выше, но вы явно указываете строку в которую надо вставить, тут в четвёртую.
  • +!ls тоже самое, но вставить на строку выше чем там где курсор.
  • -!ls тоже самое, но на строку ниже чем там где курсор.
  • %!ls вставить вывод команды в файл с перезапись всего файла.
  • wq list.txt или просто wq если до этого указывали имя файла, а не входили в режим редактирования просто клавишей e

Символ % обозначает текущий редактируемый буфер. Нажатие клавиши е означает вход режим редактирования файла без имени. Тут ls для примера, модно использовать date, pwd и любое иное не интерактивное. Можно комбинировать как в терминале

  • %!date && uptime && uname -a && echo "hello lor"

Ну и самое важное:

  • w сохранить в ткущий файл;
  • w filename сохранить в конкретный файл;
  • wq сохранить файл и выйти;
  • q! принудительно выйти без сохранения;

Любые настройки вы можете внести в свой конфигурационный файл ~/.vimrc

Например:

"так тут пишут комментарии
set syntax=on "включить подсветку синтаксиса
set mouse=a   "включить полную поддержку мыши
set list "отображать спец символы
set listchars=tab:►·,eol:·,trail:↔ "табы ,конец строки, пробелы

"можно программировать и вызывать другие программы
"это пример простой функции
function Hello()
    exec('silent !notify-send hello бугагашенька')
endfunction

"по клавише F2 на рабочем столе будет уведомление
nnoremap <F2> :call Hello()<CR>
inoremap <F2> :call Hello()<CR>

"И многое другое 

Если вы редактируете ~/.vimrc из вим, то, чтобы применить изменение, перезагрузите конфигурацию:

  • esc
  • shift + ; (там где буква ж)
  • so % или so ~/.vimrc. so сокращение от source исходник по нашему.

Затем нажмите F2 и на рабочем столе выскочит уведомление. Если не выскочило то значит не установлен notify-send (в качестве домашнего задания заставьте всё работать). Также вы можете сохранять файлы по своим горячим кнопкам, например, F5, если вы геймер =) Но для этого нужно отредактировать пример выше, пусть это тоже будет домашним заданием.

Всё описано в огромной документации:

  • esc;
  • shift + ; (там где буква ж)
  • h ;
  • Enter;

…которая всё же сложна для чтения. На первых порах просто ищите, как сделать желаемое, в интернете или через поиск на этом форуме.

Это не просто конфигурационный файл, а целый исходный файл скриптового языка программирования VimL и описывая настройки редактора, вы программируете его.
Впрочем, за этим дуйте в интернет.

Быстрый, базовый поиск:

  • esc;
  • /
  • Далее вводите то что хотите найти
  • Enter

Сброс подсветки найденного. К примеру

  • esc
  • /
  • набрать тарабарщину типа asdfsf (тупо, но я использую это, потому что быстро)
  • Enter
  • esc
  • shift + ;
  • noh
  • Enter

Быстрый переход к нужной строке в файле.

  • esc
  • shift + ;
  • номер строки
  • Enter

Быстрая, простая, замена текста.

  • esc
  • shift + ;
    • s/что-ищем/на-что-заменить/ замена только одного совпадения и только в строке на котором курсор.
    • s/что-ищем/на-что-заменить/g замена всех совпадений, но только в строке на котором курсор.
    • %s/что-ищем/на-что-заменить/g замена всех совпадений во всём файле.
  • Enter

Я описал базовые возможности, хотя вышло всё равно длинновато, но уже их хватит для очень многого, сам я использую vim на постоянной основе, но редко выхожу за рамки того что описал выше. Про цветовые схемы, тысячи плагинов и прочее я умолчал, это уже за рамками краткого описания.


Если вам лишь изредка нужно править конфигурационные файлы на своём сервере или роутере с предустановленным vim, то всё, что нужно знать, это:

  • vim /путь/до/файла/имя_файла;
  • i вход в режим редактирования. Меняйте текст как вам надо;
  • esc выход из режима редактирования;
  • shift + ; вызов командной строки, то что ниже вписывается именно в неё;
  • wq сохранить и выйти;
  • wq! если для сохранения нет прав то всё равно выйти (когда забыли sudo перед vim);
  • q! выйти без сохранения (когда что-то напортачили и испугались);

Всё!


★★★★★

Проверено: hobbit ()

Ответ на: комментарий от LINUX-ORG-RU

А где же упоминание про навигацию по тексту с помощью h, j, k, l (хотя наверняка давно и стрелки работают)? Не знал, что в комманжнвй режим с помощью Esc вываливаться можно, думал только : используется для этого.

grem ★★★★★ ()
Последнее исправление: grem (всего исправлений: 1 )
Ответ на: комментарий от grem

А где же упоминание про навигацию по тексту с помощью h, j, k, l

Ненужно, есть мышка и стрелочки =) A h, j, k, l для клавитурных умельцев, лично мне неудобно, а уж тому кому это в новинку будет совсем дикостью покажется. Вим тем и хороший что хоть так, хоть сяк делай.

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

Командным я и режим ввода команд и обычный режим обозвал. Новичкам так понятнее как мне кажется. Чтоб использовать shift + : надо сначала esc прожать.

UDP: Ой блин, хорошо заметил я там shift с ctrl перепутал в шапке и в теме про nano )))

к слову в маркдавне VimL подсвечивается по уродстки, другие подстветки ломаются на " так что разноцветную кашу я вырубил. А жаль, код должен быть красивым. Товарищ @maxcom, а можно подсветки кода сделать получше?

Например

"так тут пишут комментарии
set syntax=on "включить подсветку синтаксиса
set mouse=a   "включить полную поддержку мыши
set list "отображать спец символы
set listchars=tab:►·,eol:·,trail:↔ "табы ,конец строки, пробелы

"можно программировать и вызывать другие программы
"это пример простой функции
function Hello()
    exec('silent !notify-send hello мазафака&')
endfunction

"по клавише F2 на рабочем столе будет уведомление
nnoremap <F2> :call Hello()<CR>
inoremap <F2> :call Hello()<CR>

"И моноге другое 

Выглядит так себе. Да и bash скрипты коих тут 99% часто странно выглядят. Подсвечиватель кода явно тупо ключивые слова светит или чиселки, на кавычках всегда всё ломается :(

LINUX-ORG-RU ★★★★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 4 )
Ответ на: комментарий от LINUX-ORG-RU

лично мне неудобно

Плюсую. 20+ лет в vim’е живу - стрелочками до сих пор навигируюсь…

y скопировать выделенный текст;

Shift-Y (обычно с последующим “p”) - ещё одна «полезняшка»…

!command запустить программу прямо из редактора

Не забываем что «на выделении» в частности работает.

bugfixer ★★★ ()

i или aa переводит вас из командного режима в режим ввода

Очепятка: там достаточно одной a.

wq сохранить и выйти

shift zz удобнее чем :wq enter, ИМХО.

!ls > % или !ls > list.txt всё!

Хм. Ни разу не пробовал, щас попробовал – и оно вместо того чтобы вставить в позицию курсора, начало мне мозги парить:

W13: Warning: File "aaa.txt" has been created after editing started
[O]K, (L)oad File, Load File (a)nd Options: 

Мельтешение вот это мы одобрить никак не можем.

Про поиск и поиск с заменой ничего нет.

Вообще конечно кошмар. Пока читал, было ощущение что смотрю со стороны, непрерывно изумляясь: как этим бредом вообще можно пользоваться?!

dimgel ★★★★ ()
Последнее исправление: dimgel (всего исправлений: 2 )
Ответ на: комментарий от dimgel

там достаточно одной a.

ага, спс ))

По остальному… Я спать :D

LINUX-ORG-RU ★★★★★ ()

Про Q написано?

$vim --help | grep -e -y
   -y                   Easy mode (like "evim", modeless)
$vim -y
E233: cannot open display
$evim file
E233: cannot open display
vM ()
Последнее исправление: vM (всего исправлений: 1 )

Какая-то ерунда.

Как-будто тебе показали машину - где у нее выхлоп, как пользоваться стеклоподъемниками, как проверять уровень масла… Но где руль, переключение передач и как ими пользоваться - не рассказали.

Turbid ★★★★★ ()
Ответ на: комментарий от Turbid

Согласен. Но

Для базового взаимодействия с этим мощным редактором нужно знать что…

LINUX-ORG-RU ★★★★★ ()
Ответ на: комментарий от urxvt

Подкоректировал разделив символы. Это нам понятно что : это режим ввода команд. А тут для совсем никаких и надо всё делать явно.

Часто в туторах пишут например ^ вместо ctrl. А читающий не в курсе про такой прикол и что так принято сокращать и всё, приехали.

LINUX-ORG-RU ★★★★★ ()
Ответ на: комментарий от Turbid

так в этом весь линукс и все что с ним связано) потом окажется что руль под сиденьем, педали на потолке, а тормоз это ручка от паровоза Union Pacific Challenger которая там исторически стояла ведь раньше это был паровоз. на вопросы почему все так грустно и может что-то пора менять, тебя облепят калом, назовут муднем и скажут что вообще-то так и надо делать потому что так труЪ, unixway, особый путь, швабодка и т.д. но в чем этот особый путь и труЪ заключается, никто не скажет. лишь бы не так как у всех

Unixson ()
Ответ на: комментарий от Unixson

Это точно не про vi. Лично я пришёл к vi->vim->nvim очень поздно, хотя Linux’ом пользовался давно. Тоже думал, что это какая-то блажь. Но когда реально попробовал, понял, что это одно из самых гениальных изобретений человечества. Никто до сих пор не придумал редактора удобнее.

emorozov ()
Ответ на: комментарий от urxvt

Это общая проблема справочных руководств многих программ, где для действия упоминается, например, Ctrl+X, хотя на самом деле должно быть Ctrl+x (+, или - в альтернативном варианте описаний, нажимать не нужно). Скорее связано это с тем, что для обозначения используют не вводимый символ, а символ, который пользователь может найти на клавиатуре. Но в ряде случаев действительно нужно дополнительное нажатие Shift, так как без него проблематично ввести ?.

grem ★★★★★ ()
Последнее исправление: grem (всего исправлений: 2 )

В конце статьи надо дать список медицинских заведений, для психологической помощи и реабилитации.

utanho ★★★★ ()
Ответ на: комментарий от utanho

:)

А ведь еще целый пласт приложений vim-like. Это и браузеры, и расширения к ним, и т.д. и т.п… Так что, ‘лечить’ надо многих, если не всех. )

krasnh ()
Ответ на: комментарий от krasnh

«Холмс так и не бросил курить… А вот Ватсон без трубки уже не мог.»

grem ★★★★★ ()
Ответ на: комментарий от urxvt

Да, глаз замылился. В голове не состыковалось. Думаю про : подразумеваю Shift + ;, а пишу явно про нажатие : через Shift и пишу : вместо ‘;’ :D

Поправил.

LINUX-ORG-RU ★★★★★ ()
Ответ на: комментарий от monk

sam - экзотика, не видел ни разу, пришлось гуглить.

Фанатом Emacs был много лет, считаю эти годы напрасно потраченными. Сочетания клавиш Emacs — это тихий ужас. После того, как бросил Emacs, перестали болеть запястья рук и больше уже не болели никогда.

Пока пользовался Emacs боль была почти каждый день.

emorozov ()
Ответ на: комментарий от Mischutka

Может от навыка печатания зависит. Если фиксировать запястья, как предлагают при слепой печати, то комбинации с Alt/Ctrl сложнее нажимать, чем Vi’шные. Если же руки двигаются свободно, то левая в момент набора комбинаций лежит на модификаторах и всё удобно.

monk ★★★★★ ()
Ответ на: комментарий от krasnh

Так что, ‘лечить’ надо многих, если не всех. )

Мама, мы все тяжело больны (с)

utanho ★★★★ ()
Ответ на: комментарий от monk

Кстати как раз из трёх вариантов использования устройств ввода и выбор трёх идеальных редакторов:

vi - руки в основной позиции с указательными пальцами на F и J.

emacs - руки свободно передвигаются по клавиатуре, но мышка практически не используется.

sam - для действий по указанию объектов используется мышка, единицей обработки является выделенная область.

monk ★★★★★ ()
Ответ на: комментарий от Mischutka

Да. Кажется ерундой, но я не преувеличиваю про боль в запястье в конце каждого рабочего дня.

Кроме того, как показал опыт, редактировать в vim код (с литературным текстом мало опыта) во много-много раз эффективнее. И сочетания клавиш в vim мнемонические, поэтому легко запоминаются.

emorozov ()

жмём shift + ", затем жмём отдельно клавишу +, затем отдельно p.

Хороший аргумент почему vim должен умереть. Не должно быть таких плясок при вставки текста.

ox55ff ★★★★★ ()
Ответ на: комментарий от grem

хотя наверняка давно и стрелки работают

Работают, ага.

Zhbert ★★★★★ ()
Ответ на: комментарий от emorozov

Кроме того, как показал опыт, редактировать в vim код (с литературным текстом мало опыта) во много-много раз эффективнее.

Там разве есть аналог cedet и slime? В смысле, чтобы можно было переходить к определению функции, применению, видеть документацию по текущей функции.

monk ★★★★★ ()
Ответ на: комментарий от emorozov

То есть, Emacs и слепая печать несовместимы?

Совместимы, но не одновременно с навигацией. Нажатия на комбинации при сдвинутой левой руке также вслепую получаются, но двигать руку между «указательный палец на F» и «указательный палец на X» приходится. А правую регулярно перемещать на стрелки.

monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 1 )
Ответ на: комментарий от monk

Там разве есть аналог cedet и slime? В смысле, чтобы можно было переходить к определению функции, применению, видеть документацию по текущей функции.

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

Для продвинутого понимания кода поставил LSP, но т.к. в vim считаю себя нубом, до сих пор не использую даже 1% его возможностей. Полагаю, что поддержка переходов от определения к применению точно есть.

emorozov ()

В сонсоли только nano, чтобы что-то вроде конфига поправить. Там справка по шоткатам всегда перед глазами, что весьма кстати, потому что они наркоманские. А вим пускай будет, для олдскульщиков.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от utanho

В конце статьи надо дать список медицинских заведений, для психологической помощи и реабилитации.

Либо писать статью приквел с историческим экскурсом как и почему это так получилось… =)

ex-kiev ()
Ответ на: комментарий от LINUX-ORG-RU

для клавитурных умельцев, лично мне неудобно

Именно, если пользуешься десятипальцевым методом печати то вим заходит очень хорошо.

einhander ★★★★★ ()

В редакторе есть два режима — обычный и режим ввода: esc переводит вас в командный режим из режима ввода; i или a переводит вас из командного режима в режим ввода.

после этого 50% читателей подумает "что за на*, лучше я все набиру в nano

seiken ★★★★★ ()
Ответ на: комментарий от seiken

после этого 50% читателей подумает «что за на*, лучше я все набиру в nano

Щас набигут и предадут анафеме.

utanho ★★★★ ()

Поскольку это текст для начинающих, я бы начал со слова vimtutor.

Ещё неплохо бы познакомить людей с :E, обычно это производит впечатление.

Aceler ★★★★★ ()
Ответ на: комментарий от Aceler

Ещё неплохо бы познакомить людей с :E, обычно это производит впечатление.

Можно и :Sex предложить, это произведёт более интересное впечатление =) Но решил только фундамент, от которого всё остальное прыгает и бегает, то на чём всё основывается, а уже что дальше в глубь это пусть кто пишет ещё статью, полноценную, продуманную и всё такое.

И вообще, это чуть более расширенная версия троль комментария под статьёй про нано ))

Где про эмакс?! Я думал кто подхватит мыслю и начнётся стена из статей для маленьких по редакторам :D

LINUX-ORG-RU ★★★★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2 )
Ответ на: комментарий от grem

:nohlsearch сокращается до :noh Хотя быстрее просто вбить тарабарщину для поиска и всё. К слову добавил в шапку. Всё, больше ничего не добавлю, а то раздул и так. Для базовой работы как с обычным редактором всего этого хватит за глаза. Лично мне большего и не надо почти (за исключением свистопердулек).

LINUX-ORG-RU ★★★★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1 )
Ответ на: комментарий от monk

для действий по указанию объектов используется мышка, единицей обработки является выделенная область.

Довольно частое явление - правая рука на мыши, левая жмёт хоткеи на левой части клавиатуры.

einhander ★★★★★ ()
Ответ на: комментарий от grem

Кажется в vim можно было настроить так, чтобы сочетания клавиш срабатывали и в русской раскладке.

grem ★★★★★ ()

А как же команда «точка»? Ведь повторяющиеся действия — одно из самых популярных явлений. Именно с этой команды начинает автор книги «Практическое использование Vim: редактируйте текст со скоростью мысли», правда просит сначала, ясное дело, пройти вимтутор.

П.С. Жаль мне такой офигенный редактор просто не нужен.

papin-aziat ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)