Два в одном: как пользоваться Vim и Nano?

в 12:26, , рубрики: nano, vim, системное администрирование

Вступительное слово

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

Два в одном: как пользоваться Vim и Nano? - 1Два в одном: как пользоваться Vim и Nano? - 2
Любой текстовый редактор можно освоить «методом тыка». Но только не vim.
Чем nano лучше vim?
Из nano можно выйти без reset'а! (с) Интернет

Изначально я не планировал писать об обоих редакторах, а хотел сделать краткую справку только по nano, но в процессе сбора информации накопились данные и по vim тоже. Тут я обнаружил, что Vim не так уж и страшен, если знать команды и концепцию его использования.

Что это и зачем нужно?

Когда недоступна графическая среда, например при работе по ssh, настройке системы до загрузки xserver, либо просто из любви к извращениям красноголазию начинаешь чувствовать себя ущербным инвалидом в консольном текстовом редакторе, клавиш управления которым не знаешь от слова совсем. Даже навигация по файлу и копипаста начинают представлять собой почти непреодолимую преграду. Просто потому, что в консоли не работают многие привычные комбинации клавиш, будучи задействованными под другие нужды ещё во время дискет 5.25" на 320Кб.

Я долгое время использовал редактор от Midnight Commander mcedit, немного пользовался nano, и совсем не пользовался vim. Вызубрить все эти комбинации за гранью возможного — даже потратив на это время, через какой-то период простоя они успешно забываются. До того, как я взялся за написание этой статьи, я не мог заставить себя осилить даже азы vim, он пугает уже на стадии запуска, «пытаешься из него сразу же выйти, и не можешь!» Это как вы сейчас зайдёте в интерпретатор ZX Spectrum BASIC48, то не зная азов даже простейшей программы PRINT «Hello World!» не напишите. Я не переставал задавать себе вопрос: «Интересно, и за что гуру vim так любят? Зачем тратить кучу времени на переобучение, и главное как не растерять навыки, для каких целей его постоянно использовать, этот vim?»

Ниже я опишу самые необходимые комбинации клавиш и приёмы работы в обоих редакторах.

Nano

После комбинации Alt-6, как команды «скопировать» я даже и не знаю что сказать
Наверное автор Nano был пианистом
© из хабра-комментариев

Основой мне послужила статья на хабре: "Nano: И всё-таки его придётся выучить", а также все комментарии к ней. Они не просто её дополнили, но и заставили посмотреть в сторону vim.

РосNano-концепция:

В терминах nano текст, отделённый пустыми строками называется «параграф». Все команды отдаются нажатием комбинаций клавиш — функциональными кнопками или комбинацией Ctrl+буква или Alt+буква. Если в каком-либо случае комбинация с Ctrl или Alt забронирована системой, следует использовать дублирующие комбинации с Esc.

Одинарное нажатие на Esc эмулирует клавишу Alt. Двойное Esc Esc эмулирует клавишу Ctrl. То есть вместо Alt+X можно набрать Esc X, вместо Ctrl+K можно набрать поочерёдно Esc Esc K.

Самое важное:

Alt+U (Esc U) — Undo, отмена последнего действия.
Alt+E (Esc E) — Redo, повтор отменённого действия.

F1 (Ctlr+G) — Показать справкуF2 — Выход с сохранением файлаCtrl+X — Вернуться к редактированию из справки, и прочих диалоговых окон, выход из программы.

Копирование и вставка текста:

Alt-A (Ctrl-6) — установитьснять маркер начала выделения текста (либо просто стрелки с shift)
Alt+6 (Esc 6) — копировать выделение текст в буфер обмена. Комбинация alt+6 у меня занята и не заработала.
Ctrl+K (или F9) — вырезать выделенный фрагмент в буфер обмена, при отсутствии выделения удалить строку.
Ctrl+U (или F10) — вставить фрагмент из буфера обмена
Ctrl+Shift+V — вставить из GUI буфера обмена
Ins — Вставка текста из другого файла, либо вывода команды.

Поиск и замена:

Ctrl+W — Поиск
Alt+W — Повторный поиск
Ctrl+ — Замена. Помнит последний поиск как изменяемое по умолчанию.

Навигация:

Alt+ (Ctrl+Home) — В начало файла
Alt+/ (Ctrl+End) — В конец файла
Ctrl+Y (PgUp)— На страницу вверх
Ctrl+V (PgDn) — На страницу вниз
Alt+S — Переключение между плавной прокруткой страниц и фиксированной

Дублирование курсорных клавиш, то чем так гордится vim, только врастапырку:
Ctrl+B — Влево на символ
Ctrl+F — Вправо на символ
Ctrl+N — Вниз на символ
Ctrl+P — Вверх на символ

Ctrl+Space — На слово вперёд, можно просто Ctrl+курсор. (курсор встаёт в начале слова)
Alt+Space (ESC Space) — На слово назад.
(у меня эта комбинация вызывает строку быстрого запуска KRunner в KDE, поэтому использую ESC Space)

Alt+- — Прокрутка вверх не меняя позиции курсора
Alt+= — Прокрутка вниз не меняя позиции курсора
Alt+7 (Esc 7) — К предыдущему блоку текста, либо просто Ctrl+курсор
Alt+8 (Esc 8) — К следующему блоку текста.
Alt+0 (Esc 0) — К следующему параграфу (до первой пустой строки вниз).
Alt+9 (Esc 9) — К предыдущему параграфу (до первой пустой строки вверх).

Alt+G — Переход на строку с указанным номером.

Alt+< — Переход к предыдущему открытому файлу (Если nano запущен с несколькими файлами)

Alt+> — Переход к следующему открытому файлу.

Ещё пишут про команду Alt+F, которая не то включает такую возможность, не то позволяет зачем-то иметь отдельные буфера обмена на каждый файл, но как она работает я не понял.

Редактирование текста:

Ctrl+D (Del) — стереть символ под курсором
Ctrl+H (BSp) — Стереть символ слева от курсора
Ctrl+M (Enter) — Вставка пустой строки.
Ctrl+I (Tab) — Вставка табуляции.
Alt+Shift+{ — Уменьшить отступ параграфа удалением табуляции или пробеловAlt+Shift+} — Увеличить отступ параграфа, вставкой табуляции. Если уже был отступ пробелами, добавит к нему табуляцию и подсветит красным.
Ctrl+] — Автодополнение слов, например команд в программе. Программисты оценят!
Alt+3 (Esc 3) — За(рас)комментировать символом # текущую строку, выделенный параграф.
Alt+J (F4) — Justify, выровнять текущий абзац

Разное:

Esc Esc 220 ­— Ввод символов по десятичному коду. Например 220 — ввод Ü с умляутом.
Alt+V — Ввод ASCII последовательности комбинации или клавиши.
Alt+T — Trunkate. Стирает всё от курсора и до конца файла.
Ctrl+C (F11) — Разово выводит информацию по текущей строке, колонке, номеру символа.
Alt+D — Подсчитать количество слов, строк, символов в файле
Ctrl+L — Обновить экран

Настройки nano:

Alt+Shift+4 — Мягкий перенос длинных строк разрешить/запретитьAlt+K — переключает действие по Ctrl+K между удалением по умолчанию всей строки и удалением от курсора до конца строки.
Alt+Q — Переключиться с табуляций на ввод пробелов.
Alt+L — Включить и выключить жёсткий перенос строк.Alt+C — Переключает постоянный вывод инфо по строке по Ctrl+C
Alt+X — Показатьскрыть строку подсказки внизу экрана.
Alt+Shift+3 — Показывать номера строк.
Alt+P — Показывать пробелы символом "·"
Alt+Y — Показывать подсветку синтаксиса.
Alt+H (Esc H) — Включить умную клавишу Home (переводит курсор не в 1ю колонку, а на 1й символ строки)
Alt+I (Esc I) — Включить автоотступы (перевод строки на новую с таким же отступом, как у предыдущей)
Alt+B — Переключиться на создание резервных копий и обратно
Alt+M — Включить «поддержку мыши». лучше не использовать, ерунда!

Говорят, что nano по умолчанию не поддерживал отмену действий (undo). У меня в Manjaro всё поддерживает, но на всякий случай решение — запускать nano с ключом -u: nano -u filename.
Для включение подсветки синтаксиса в nano следует раскомментировать директивы include в файле /etc/nanorc.

На этом всё.

Другие использованные ссылки:

Раз | два | три


Два в одном: как пользоваться Vim и Nano? - 3Vim, немного крипоты

«у vi есть два режима: бибикать и всё портить»
©
Холиварненько

Изначально Vim разрабатывался для аппаратного терминала ADM-3A, он слева на фото.

Приведу несколько цитат перед статьёй, которые как бы намекают читателю: "— Ужаснись и беги. Слышишь смертный? Беги! И не говори потом, что тебя не предупреждали..."

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

© https://ru.wikibooks.org/wiki/Vim
* * *

Ну, смотрите, человек запускает vim, курсором доползает до нужного места, стирает лишнее, начинает печатать, в какой-то момент доходит до буквы 'i'/'c' и т.д., после чего остаток введённого появляется на экране не там, где человек хотел. Он нажимает esc, q, у него начинается какая-то фигня, он нажимает несколько раз esc, esc, потом пишет :q, потом нажимает три раза Esc пишет :Q!, потом нажимает ещё пару раз Esc, пишет :q!, потом снова vim и уже редактировать. (q) Пример ада с vim

* * *
У меня кстати была обратная ситуация, когда я подошел к сотруднику подсказать что подправить в конфиге и в фаровском редакторе напечатал ему полстрочки букв j, прежде чем понял, что что-то не так, курсор двигается вправо, а не вниз и ещё и мусор какой-то появляется. (q) Байка о силе привычки

* * *
Судя по тому, что я сейчас прочел, пользователи… нет, скорее «активисты» vi — не просто придурки, а отборные мазохисты. Не знаю, может кто-то в этой статье видит преимущества vi, я же вижу убийственный гемморой, переусложняющий простой ввод кода до уровня секвенирования ДНК. (й) +15 голосов в хаброкомментах

* * *
Cейчас средства разделились на редакторы (набрать текст) и IDE (работать с проектом). Вим получается посередине, как утка. Но это уже не нужно. Если я хочу набрать текст — мне не нужен редактор который осваивать дольше чем IDE, мне нужен ee/nano. А если мне нужна работа с проектом — мне нужна нормальная IDE с большими возможностями и низким порогом вхождения, а не школа белого нидзя по освоению навороченного текстового редактора. (q) убийственный хаброкоммент

Тем не менее, мы попытаемся!

Следует запомнить, что Vim имеет два режима: командный и модальный. В первом вводятся команды, например просто введя двоеточие : можно стрелками вверх-вниз перебирать историю ранее введённых команд. Введя начало команды, по Ctrl+d можно увидеть список похожих команд, а по Tab дополнить сокращение до полного названия команды. Все команды, начинающиеся с : должны завершаться нажатием ENTER, остальные исполняются моментально. Во втором режиме правится текст. Вход в модальный режим по a, i. После правки фрагмента текста, всегда нажимайте Esc, чтобы вернуться в командный режим, и у вас никогда не возникнет вопроса, в каком режиме сейчас редактор.

Поясняющая цитата о вводе команд: Команды в vim задуманы комбинируемыми: 'd' значит «удалить», 'e' значит «переместить курсор в конец слова», поэтому 'de' завершенная команда, означающая «удалить все от текущего положения курсора до следующего конца слова» Команды регистрозависимы!

Например войдя в модальный режим (редактирование текста) по i, введя «True», и выйдя в командный по Esc, вы можете перемещаться по файлу со всей мощью команд навигации и нажимать '.' везде, где нужно повторить команду, то есть вставить слово «True» в текущую позицию курсора в данном случае. Учитывается весь введённый фрагмент с перемещениями курсора и стиранием символов. Так можно по точке автоматизировать ввод форм в одинаковые блоки.

Команды Vim:

Возможно, это только для меня стало внезапным открытием, но вся справка на русском языке по клавишам vim доступна внутри терминала в виде уроков по команде (в том числе по ней я делал этот конспект):

vimtutor ru

Два в одном: как пользоваться Vim и Nano? - 4

Перемещение:

hjkl — дублирование курсорных клавиш влево, вниз, вверх, вправо.
^ или 0 (нуль) — В начало строки
$ — В конец строки
e — В конец текущего, затем следующего, слова.w — К началу следующего слова.% — Перемещение в строке между скобками: (){}[]

Ввод числа перед оператором перемещения приведёт к его повторению заданное количество раз.
2w — Перемещение курсора вперёд к началу второго слова.
3e — Перемещение курсора вперёд к концу третьего слова.

Комбинирование команд упрощает навигацию:j$ —Вниз, в конец следующей строки.

Shift+g — Перейти в конец файла. Если перед этим ввести номер строки, то переход к ней.
507 Shift+g — Например вот так будет переход не в конец, а к строке номер 507
:45Enter — Переход к строке номер 45
mk — Пометить текущую позицию как k
‘k — Перейти к метке k

H, M, L — перемещение курсора на верхнюю, среднюю и нижнюю линию экрана.
zt, zz, zb — перемещение курсора вместе с текстом на верхнюю, среднюю и нижнюю линию экрана.
* — Переместить курсор на следующее слово, такое же, как под курсором
# — Переместить курсор на ПРЕДЫДУЩЕЕ слово, такое же, как под курсором

Вход в модальный режим редактирования текста:

i — Insert, переход в режим вставки текста левее курсора
a — Append, переход в режим вставки текста правее курсора
A — App_end, переход в режим вставки текста в конец строки
R — Replace, переход в режим замены текста.
o — создать пустую строку под текущей и перейти к её редактированию.
O — создать пустую строку НАД текущей и перейти к её редактированию.

Редактирование:

u — UNDO, отмена последнего действия
U — UNDO, отмена изменений только в последней строке
Ctrl+r — Redo, повторить отменённое действие текущего модального сеанса редактирования.

Многие команды, изменяющие текст, состоят из оператора и объекта. Например ниже оператор удаления d комбинируется с объектом направления удаления:

dw — удалить от курсора до конца слова, включая последующий пробел.
de — удалить от курсора до конца слова, НЕ включая последующий пробел.
d$ — удалить от курсора до конца строки.
d^ — удалить от курсора до начала строки.
ce — удаляет слово и переводит в режим вставки.
c$ — удалить от курсора до конца строки и перейти в режим вставки (редактирования текста).

Ввод числа перед оператором приведёт к его повторению заданное количество раз.

d2w — Удаление двух слов подряд
x — Del, стереть символ под курсором.
dd — Удаление строки
D — Очистка строки от символов
r — замена символа под курсором следующим за r
После нажатия r+символ возвращается в командный режим, что делает неудобным использование для правки русского текста без адаптации командного режима vim к русской раскладке клавиатуры.

diw — удалить слово
ciw — удалить слово
c% — Вырезание выражения в скобках. (% этоShift+5)
ce WORD Esc — вводить на первом символе какого-либо слова, чтобы заменить его на WORD. После по точке так можно будет сделать с любым.

d$ или D (Shift+d) — удаляет строку после курсора
db — удалить слово ДО курсора
di( — удаляет то что в скобочках.
di" — то, что в кавычках
dw — Удаление участка текста от курсора до конца слова.
d5d — удалить 5 строк от курсора вниз
S — Удалить все до конца строки

Ctrl+a — Увеличить число под курсором на единицу
Ctrl+x — Уменьшить число под курсором на единицу
Vu — Перевести строку в нижний регистр
VU — Перевести строку в верхний регистр
g~~ — Инвертировать регистр

Поиск:

При достижении конца файла поиск будет продолжен с начала.

/ — Поиск текста по образцу вперёд
? — Поиск текста по образцу назад
n — Следующее найденное совпадение
NПредыдущее найденное совпадение
Ctrl+o — вернуться туда, откуда начали поиск
Ctrl+i — вернуться обратно к найденному после ctrl+o
% — Поиск парных скобок: (), [] или {}

Поиск и замена:

:s/было/стало — Поиск и замена только первого найденного совпадения в текущей строке
:s/было/стало/g — Поиск и замена всех найденных в текущей строке совпадений
:30,90s/было/стало/gc — поиск и замена с 30 по 90 строку по всей их длине, с подтверждением
:%s/было/стало/gc — поиск и замена во всём файле с подтверждением.

То есть :s/ — текущая строка, :30,90s/ — диапазон, :%s/ — весь файл.
g — во всей строке, c — с подтверждением, иначе только первое совпадение в строке, и без подтверждений.

Можно не писать каждый раз команду заново, достаточно ввести : двоеточие и стрелками курсора вверх-вниз перебирать ранее введённые варианты.

Выделение:

v — визуальный выбор, выделение фрагмента текста для операции над ним.
d — удаление выделенного фрагмента
y — копирование выделенного фрагмента
yw — копирование одного слова от позиции курсора до конца слова вместе с пробелом.
p — вставка скопированного фрагмента
vgU — выделить в визуальном режиме фрагмент и перевести его в верхний регистр.
vg~ — Выделить в визуальном режиме фрагмент и ИНВЕРТИРОВАТЬ его регистр.

Файловые операции:

:w — сохранить изменения в текущий файл
:w file.txt — сохранить в файл file.txt
:w! file.txt — сохранить и перезаписать file.txt, если существует.
:w~/file.txt — сохранить в файл file.txt в домашней папке
:e — Переоткрыть текущий файл.
:e file.txt — открыть файл file.txt.
:ene — Создать новый файл.
:ene file.txt — Создать файл file.txt.

Для сохранения фрагмента, выделить его по клавише v и сохранить с указанием имени как выше. Командная строка будет иметь вид подобный :'<,'>w file.txt
:r file.txt — вставить содержимое файла file.txt в позицию ниже курсора
:r!ls — вставить вывод внешней команды ls.
:! ls — выполнить любую внешнюю команду, в данном случае ls

Настройки:

:set ic — IgnoreCase, игнорирование регистра при поиске или замене
:set noic — вернуть регистрозависимый поиск или замену
:set hls — Hlsearch, подсвечивать найденное
:set nohls — НЕ подсвечивать найденное
:set is — Incsearch, инкрементный поиск — отображение частичных совпадений при поиске
:set nois — Отключить инкрементальный поиск, искать по enter.

Разное:

Ctrl+g — Показывает строку статуса с именем открытого файла, номером текущей строки.
Esc или Ctrl+C или Ctrl+[ — выход в командный режим.:e Enter — Выход. Именно с ДВОЕТОЧИЕМ! Я сам долго не мог выйти. Решил, что ':' это часть предложения, а не часть комбинации, которую нужно набрать и долго жал 'q'.
:e! Enter или :x или :wq — Выход без сохранения
ZQ ­— Моментальный выход без сохранения и подтверждения.

Настройки по умолчанию можно записать в конфигурационный файл ~/.vimrc
Например без этого я не начну писать в vim ни одной программы на Python:
set tabstop=4 # Длина табуляции
set expandtab # Замена табуляции пробелами

Окна:

Ctrl+W Ctrl+W — Переход между окнами, например при вызове справки по :help между ней и текстом.
:tab ball — Поместить все открытые файлы во вкладки
:tabnew — Создать новую вкладку
gt — Перейти на следующую вкладку

Полезные хитрости:

:%s#>[^<]+>##g — Очистить текст от HTML-тегов
:%s/^(.*)n1$/1/ — Удалить строки, повторяющиеся дважды

Приложение:

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

Два в одном: как пользоваться Vim и Nano? - 5 Lesson 1Lesson 2Lesson 3
Lesson 4Lesson 5Lesson 6
Lesson 7

Решение проблем:

Простое решение проблемы командного режима в русской раскладке, положить в файл ~/.vimrc с содержимым в одну строку:

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯЖ;
ABCDEFGHIJKLMNOPQRSTUVWXYZ:, фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

Однако я заметил единственный минус — в правом нижнем углу перестают отображаться вводимые символы в режиме команд.

* * *

Вот эта пара строк сильно экономит время на копание в .vimrc
" ## Edit .vimrc ##
map ,v :vsp $MYVIMRC<CR>
map ,V :source $MYVIMRC<CR>
Первая маппит на ,v открытие .vimrc в вертикальном окошке, а вторая просит VIM пересчитать файл.

* * *

О разнице, какой клавишей выходить в командный режим: Ctlr-C просто переходит в normal mode. Если на выход из insert mode какими нибудь плагинами навешаны какие-нибудь хуки, то при нажатии Ctrl-C vim их проигнорирует, а при нажатии Esc или Ctrl-[ запустит. (й)

Список использованной и рекомендуемой литературы:

  1. Статьи на Хабре
  2. Почему, ну почему, эти #?@! придурки используют vi? (отличная статья! А комменты просто жгут)
  3. Vim и кириллица: парочка приёмов
  4. Аж целую книгу запилили по этому vim, я удивляюсь. Нашёл на файлопомойке тут
  5. Прямая ссылка на книгу: O'Reilly — Learning the vi and Vim Editors 7th Edition (перевод).pdf
  6. Vimtouch под Android. Если готовый в googleplay
  7. 100 команд vim, которые должен знать каждый

Автор: yuukoku

Источник

Поделиться

* - обязательные к заполнению поля