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 ()

Мне нужно вставить текст из буфера в конец текста, в новый абзац и пустого абзаца в конце текста у меня ещё нет. Как это сделать, не переходя в режим ввода текста с последующим возвратом в режим команд?

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

а вот я сделал сплит (vs, например) и как мне перемещаться между панелями?

Инструкцию хороша, узнал много нового про мой любимый редактор

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

C-w h, C-w j, C-w k, C-w l.

Так же, как и перемещение курсора, только с префиксом C-w. Соотв-но, перемещаешься в панель по направлению движения.

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

а вот я сделал сплит (vs, например) и как мне перемещаться между панелями?

Так же, как и перемещение курсора, только с префиксом C-w.

Я чаще всего использую C-w w - «прыгает» на «другую панель». И нажимается легко, и не нужно задумываться на тему направления. «Хозяйке на заметку».

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

Мне нужно вставить текст из буфера в конец текста, в новый абзац и пустого абзаца в конце текста у меня ещё нет. Как это сделать, не переходя в режим ввода текста с последующим возвратом в режим команд?

Тебе нужно что-то типа такого?
nnoremap <Leader>o o<Esc>
nnoremap <Leader>O O<Esc>

Спасибо, наверное да, но я думал - есть что-то по-проще. Здесь перепрограмируется поведение o и O, что не есть хорошо.

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

Спасибо, наверное да, но я думал - есть что-то по-проще. Здесь перепрограмируется поведение o и O, что не есть хорошо.

Здесь используется <leader>o/O, а оригинальные o/O не изменяются.

Но по идее, это вполне обычные Go<ESC>p https://asciinema.org/a/MNsrR1DLQhgaw3oMJ8SsfyAWp

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

Мне нужно вставить текст из буфера в конец текста, в новый абзац и пустого абзаца в конце текста у меня ещё нет. Как это сделать, не переходя в режим ввода текста с последующим возвратом в режим команд?

ну и прикола ради: :pu_|pu или сразу в конец :$pu_|pu https://asciinema.org/a/KBfCmaRD9RreqFAlfvHxa7MmT

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

Самое простое - это жмёшь ctrl и два раза w не отпуская ctrl Оно будет по кругу менять фокус на разделённые окна. Но я мышкой в vim пользуюсь так что просто кликаю куда мне надо и всё =)

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

Пожалуйста. Скоро про изоляцию в firejail будет, тоже кратко чисто жизненные ситуации. Если бы не не ленился то пару недель назад бы уже было хехе, планов то было, планов. Зато MassEffect2 за три дня прошёл ох йё.

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

Тормозит третье ведьмак тотально, я второй прошёл, к первому надо привыкнуть. Сейчас MassEffect 3 прохожу (первый и второй норм кинцо, от хардкорных 2D и прочего отдохнуть самое то), тоже тормоза кое как подтюнил вроде терпимо, допройду. Графика как во второй части, а тормоза один фиг. Но в диалогах 90% времени всё шикарно. Пройду ведьмака 3 когда видеокарту сменю (не скоро).

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