LINUX.ORG.RU

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

 , ,

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

26

8

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

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

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 ★★★★★
() автор топика
Ответ на: комментарий от emorozov

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

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

Я имею в виду вот это:

imap jk <Esc>

При быстром нажатии jk, срабатывает как Esc. Не надо растягивать пальцы, чтобы дотянуться до Esc или Ctrl-[. При этом случайно нажать jk довольно сложно, я пользовался этим сочетанием, и ни разу случайно jk не нажал.

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

Да я тоже про это, я пользовался какое-то время таким мэппингом. Во-первых мэппинг получается неконсистентный, т.к. выход из normal mode вообще не единственный кейс использования <Esc>, во-вторых оно тупо глючит при работе по сети на слабом канале.

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

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

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

Второй момент - попробуй такое сделать на экранной клавиатуре :) А так-то, vim один из лучших вариантов для тачскрина.

faq2
()

Если вы проводите непосредственно за редактированием текста меньше N часов в неделю, то правильно будет сконфигурировать vim так:

EDITOR=nano
VISUAL=nano

Я оцениваю N примерно в 4-6.

muon ★★★★
()

а зачем вот так делать вставку?

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

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

можно же просто Esc P, а не жать пять кнопок

в чём профит?

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

а Shift+Insert зачем тогда?

или это чтобы на утюге скопировать из кофемолки и чтобы вставить в конфиг мультиварки?

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

Пробежался глазами, много непонятного.

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

Зачем так сложно описывать все это, а не просто «команда :noh». Я даже сначала не понял, что там было написано.

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

d не удаляет, а вырезает. Про это важно помнить, если одновременно копируешь и вставляешь текст, чтобы не затереть буфер.

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

Вим запоминает сразу несколько последних удаленных данных. Поэтому можно вставлять, указав напрямую буфер, который d никогда не затирает: "0p.

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

А есть в виме именно удаление текста, без входа в режим вставки?

Полно вариантов. Собственно, непонятно даже, зачем для удаления входить в режим вставки. dw удаляет слово, dd - строку, dfC/dtC удаляют от курсора до заданного символа, diC/dawC удаляют содержимое внутри кавычек/скобок.

В визуальных режимах тоже можно удалять командой d.

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

d не удаляет, а вырезает. Про это важно помнить, если одновременно копируешь и вставляешь текст, чтобы не затереть буфер.

dw вырезает слово в буфер

einhander ★★★★★
()

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

«эс как доллар вэ как галочка»

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

Чтобы не забивать голову узкоспецифичными маловостребованными навыками.

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

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

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

ладно, не столько навыки, сколь само пердоленье.
как объяснить, что человек 1) обладающий даже базовым навыком слепого набора 2) давно понявший, что управляться с текстом гораздо приятнее именно так как в виме, не рассматривает уход от него как некий отдых? а наоборот. мне не приходит в голову такая странная конструкция - если мне надо налабать 1000 знаков, то это да, нужно понурив голову запускать вим, а вот если 10 - то ура ура хлопая в ладоши «обойтись» наной.
короче они не «узко». А по гамбургскому счёту, как раз «широко». Узко это как заставить Вим нарисовать последовательность или вообще любые другие специальные функции, самописные или нет.

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

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

2 жырных полоски с хоткеями внизу меняет сознание миллионов

Да. И ещё отсутствие уникальной концепции режимов.

Именно поэтому nano — потому что никаких навыков использования nano я в голове не храню. Я помню только, что он есть, можно открыть и пользоваться. Не нужно что-то читать перед первым использованием, не нужно что-то помнить в остальные.

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

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

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

А чем? Практически любая работа на компьютере, если это не граф. дизайн, подразумевает написание и/или редактирование текста.

В vim это проще и удобнее делать, даже если это сакраментальные «две строки текста».

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

Нуу, в моём манямирке за «работу на компьютере» платят низкоквалифицированным сотрудникам с должностью типа «оператор ЭВМ». Мне платят за решение и предотвращение проблем, а напишу я скрипт, научу человека или поменяю процесс организационно — это мало кому интересно.

Если спускаться с уровня целей на уровень практических задач, то планирование, написание писем, бронирование переговорок в Outlook, сами переговоры с людьми, тыканье мышью в заббикс, написание отчётов, закрытие тикетов в трекере, покупка лицензий или написание команд в баш — не задачи для вима.

Если спускаться ещё ниже, то поменять Timeout=3 на Timeout=30 в zabbix_agent.conf в виме не получится сделать заметно быстрее, чем в nano.

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

или написание команд в баш — не задачи для вима.

Если спускаться ещё ниже, то поменять Timeout=3 на Timeout=30 в zabbix_agent.conf в виме не получится сделать заметно быстрее, чем в nano.

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

Отредактировать Timout=3 на Timeout=30 тоже скорее всего будет заметно удобнее и даже быстрее. Допустим, можно будет сразу перейти к нужной строке (не стрелочками), нажать A0. Или, там, f=li0. Вариков масса.

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

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

не стрелочками

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

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