LINUX.ORG.RU

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

 , ,


18

7

Основные команды текстового редактора 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 ()

Ответ на: комментарий от muon

^W, Timeout= , Enter, End, Backspace, 30, ^X, Enter. Это в nano.

Это делается не в Home row.
Это делается легче (нет связок ctrl+)
Учиться не надо, надо быль как все.
У тебя нет времени, падает сервер/база частями, надо быстро что-то сделать с текстом. Незнание readline или vim…
Почта требует реагирования и обработки - Emacs или Mutt помогают, очень. Но зачем тратить время? Я буду как все.
Когда надо править сложный конфиг, то бесконечная история изменений в Vim РЕАЛЬНО выручает. Nano? Не слышал.

Roy-Batty ()
Ответ на: комментарий от Roy-Batty

Это делается не в Home row

Понятия не имею, что это.

У тебя нет времени, падает сервер/база частями, надо быстро что-то сделать с текстом.

Если лично про меня, то у меня в BCP нет readline или vim.

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

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

Это небольшое время. Если не заморачиваться изучением vimscript/lua, настройкой сотен плагинов, то база vim изучается, допустим, за пару часов. Освоить абсолютно всё можно, наверное, часов за 8, самое большее (все режимы, всякие сверх-сложные команды редактирования, макросы).

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

^W, Timeout= , Enter, End, Backspace, 30, ^X, Enter. Это в nano.

В vim не придётся вообще убирать руки с домашнего ряда и/или нажимать две кнопки одновременно. Да и скорее всего просто по нажатиям будет быстрее (точный бенчмарк можно сделать на конкретном примере). Это очень сильно добавляет комфорта.

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

В vim не придётся вообще убирать руки с домашнего ряда и/или нажимать две кнопки одновременно

До этого треда я вообще не знал, что это проблема. И что такое «домашний ряд» я только догадываюсь.

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

Человек может только сравнить. Если сравнивать не с чем, то и так хорошо. Готовил на огне, а тут плита. Стирал руками - стиралка. Работал на Windows всю жизнь и горя не знал…

Roy-Batty ()
Ответ на: комментарий от muon

Ясно, яженепрограммист. Сразу бы так и сказал.

Читать ты судя по всему тоже не умеешь. Зачем эти навыки? Лучше ленту одним пальцем крутить и в лайк тыкать. Можно прямо на сноуборде (я предпочитаю охоту/рыбалку).

ЗЫ любой якобы обучающий материал по виму который тычет в нос обучаемому «концепцией режимов» можно сразу выкидывать.
ЗЗЫ хипстерские чит-щиты тоже

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

Ясно, яженепрограммист. Сразу бы так и сказал.

Читать ты судя по всему тоже не умеешь

Во-первых, вот что я писал несколькими комментариями выше:

«непосредственно за редактированием текста меньше [4-6] часов в неделю»

Так что вопрос, кто из нас не умеет читать, остаётся открытым.

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

Тем не менее, ветка стремительно скатывается в ad hominem. Так что дальше без меня.

Давай, до свидания.

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

Так я и сравниваю.

Идею «сравнивать можно только на основании собственного эмпирического опыта» я у тебя не куплю, извини.

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

Всё так. Это не объяснить. Как можно слепому рассказывать о цвете неба? Я пользовался компьютерами лет десять, пока не потратил время на слепую печать. Все десять лет я говорил, что это ненужный скил, что я думаю больше, нажимаю меньше… А теперь не представляю, как я без него вообще ктехнике подходил.

Это нас подводит к тому, что ты смешной )))

Roy-Batty ()
Ответ на: комментарий от Roy-Batty

Как можно слепому рассказывать о цвете неба

Аналогии не доводят до добра. Чуть выше ты писал про выбор. У слепого есть выбор, на небо какого цвета смотреть?

Бросал бы ты это. А то сначала вим, потом аналогии, потом героин.

Все десять лет я говорил

Говорить — не сравнивать. Сравнивать можно по объективным показателям.

туц

Быстрый ответ
160-260 зн/мин. 32-52 wpm. средняя скорость печати человека, который владеет навыком слепого десятипальцевого метода набора.

Тут всё понятно. Свою нынешнюю скорость печати я знаю. Количество набиваемого за день текста тоже. Дальнейшие расчёты просты.

Про вим я услышал только «ну это по-любому будет быстрее, и два часа на обучение отобьются, ну, кхм, быстро».

Ок, я понял. До свидания.

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

Так ты же лохом себя ставишь. Пришел в тему, посвященную новичкам, начал что-то доказывать. Ты хоть в тему нырни, да толку. Ты же на сравнения не ведёшься. Сам пишешь.

Сравнивать можно по объективным показателям.

Тебе выше конкретно привели. Быстрее? Да хрен его знает. Удобнее? Да. Полезнее для тушки/пальцев? Да! Даёт ли что-то в работе? Да, меняет человека, заставляя его переосмысливать работу с компьютером, ПО и учиться новым трюкам :)

Теперь к твоей персоне. Ты уже не смешной, ты просто на низшей ступени. Ты как все. ИМХО, быть как все - страшно. А если ты ещё и в возрасте и считаешь часы учёбы на что-то там, то у меня для тебя плохие новости.

Это я к тому, что тебя никто, Карл, никто не заставляет писать под статьёй, посвященной тому, в чём ты не только не разбираешься, но и не хочешь пробовать разбираться. Это не имеет смысла со стороны траты на тебя времени. Я же пишу под статьёй, а значит её кто-то будет читать и, надеюсь, не станет повторять твоих ошибок и не выставлять себя лузером.

Ок, я понял. До свидания.

Всего хорошего и с НГ.

Roy-Batty ()

Сейчас случайно узнал что в vim есть встроенное шифрование файлов.

В редакторе :X - вкл/выкл. шифрование. При запуске : vim -x имя_файла.txt

в конфиге : setlocal cm=encryption_method (выбрать метод шифрования).

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

Хм, прикольно. Но я всё же давно перешёл на шифрование всей системы при установке через dm-crypt. Это удобнее, чем помнить какой файлик надо шифровать, какой нет, и для каждого помнить отдельный пароль.

emorozov ()

vs разделить окно вертикально;
sp разделить окно горизонтально;

А как переключиться на соседнее окно и обратно с клавиатуры так и не написал...

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

До кучи поменять местами разделённые окна удерживая ctrl+w потом тапнуть на r тоже будет по кругу перекладывать «окна»

LINUX-ORG-RU ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.