Два в одном: как пользоваться Vim и Nano?
Upd. 9.7.2017: обновлён раздел про vim. Спасибо вимерам за ценные дополнения.
Зачем нужна ещё одна, 1001я публикация на эту тему? Статей про vim и nano написано огромное количество, но как правило они касаются только одного из редакторов, либо представляют из себя общий обзор. Чтобы в одной были сжато описаны оба редактора, но при этом без углубления в дебри приведены все основные клавиши управления для полноценной работы, я не не нашёл. Поэтому, почитав найденные материалы, я начал их конспектировать, так и родилась эта статья.
Любой текстовый редактор можно освоить «методом тыка». Но только не 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?»
Ниже я опишу самые необходимые комбинации клавиш и приёмы работы в обоих редакторах.
После комбинации 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 — Переход на строку с указанным номером.
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.
На этом всё.
Другие использованные ссылки:
Раз | два | три
«у 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) убийственный хаброкоммент
Выше показана старая клавиатура IBM PC AT original keyboard. Приглядитесь повнимательнее.
Vim разрабатывался ещё в те времена, когда клавиша Ctrl находилась на месте CapsLock, где удобнее нажимать мизинцем. Как часто вы пользуетесь этой клавишей? А клавишей Ctrl? Но фирма IBM решила иначе, и всё сложилось как сложилось.
VIM — это слепой десятипальцевый метод редактирования текста. (й) youtube
Следует запомнить, что Vim имеет два режима: командный и модальный. В первом вводятся команды, например просто введя двоеточие : можно стрелками вверх-вниз перебирать историю ранее введённых команд. Введя начало команды, по Ctrl+d можно увидеть список похожих команд, а по Tab дополнить сокращение до полного названия команды. Все команды, начинающиеся с : должны завершаться нажатием ENTER, остальные исполняются моментально. Во втором режиме правится текст. Вход в модальный режим по a, i. После правки фрагмента текста, всегда нажимайте Esc, чтобы вернуться в командный режим, и у вас никогда не возникнет вопроса, в каком режиме сейчас редактор.
Поясняющая цитата о вводе команд: Команды в vim задуманы комбинируемыми: 'd' значит «удалить», 'e' значит
«переместить курсор в конец слова», поэтому 'de' завершенная команда,
означающая «удалить все от текущего положения курсора до следующего
конца слова» Команды регистрозависимы!
Например войдя в модальный режим (редактирование текста) по i, введя «True», и выйдя в командный по Esc,
вы можете перемещаться по файлу со всей мощью команд навигации и нажимать '.'
везде, где нужно повторить команду, то есть вставить слово «True» в
текущую позицию курсора в данном случае. Учитывается весь введённый
фрагмент с перемещениями курсора и стиранием символов. Так можно по
точке автоматизировать ввод форм в одинаковые блоки.
Команды Vim:
Возможно, это только для меня стало внезапным открытием,
но вся справка на русском языке по клавишам vim доступна внутри
терминала в виде уроков по команде (в том числе по ней я делал этот
конспект):
Перемещение:
hjkl — дублирование курсорных клавиш влево, вниз, вверх, вправо.
^ или 0 (нуль) — В начало строки
$ — В конец строки
w — Переход к началу следующего слова.e — Переход в конец текущего, затем следующего, слова.E (Shift+e) —Как e только без учета символов препинания.% — Перемещение в строке между скобками: (){}[]
Ввод числа перед оператором перемещения приведёт к его повторению заданное количество раз.
2w — Перемещение курсора вперёд к началу второго слова.
3e — Перемещение курсора вперёд к концу третьего слова.
Комбинирование команд упрощает навигацию: j$ —Вниз, в конец следующей строки.
Alt+{ (Alt+Shift+[) — Переместиться на пустую строку перед текущим параграфом
Alt+} (Altl+Shift+]) — Переместиться на пустую строку после текущего параграфа
Shift+g — Перейти в конец файла. Если перед этим ввести номер строки, то переход к ней.
507 Shift+g — Например вот так будет переход не в конец, а к строке номер 507
:45 Enter или 45gg — Переход к строке номер 45
Вместо k может быть любая маленькая буква для локальных меток, и большая для глобальных, к которым можно обращаться из другого файла.mk — Пометить текущую позицию как k
‘k — Перейти к раннее созданной метке k
'. — (backquote, dot) перейти по автоматической метке в начало последней отредактированной строки.
H, M, L — перемещение курсора на верхнюю, среднюю и нижнюю линию экрана.
zt, zz, zb — перемещение курсора вместе с текстом на верхнюю, среднюю и нижнюю линию экрана.
* — Переместить курсор на следующее слово, такое же, как под курсором
# — Переместить курсор на ПРЕДЫДУЩЕЕ слово, такое же, как под курсором
Оконная навигация — окна и вкладки:
На каждый открытый файл выделяется свой буфер редактирования, которым оперирует пользователь. При нескольких открытых файлах можно переключаться между ними, то есть между их буферами:
:bn — открыть в текущем окне следующий буфер
:bp — предыдущий
:ls — просмотреть список открытых буферов
:b имя_буфера — переключиться на буфер открытого файла, работает автодополнение по Tab.
:bd имя_буфера — удалить буфер по имени:bd — удалить текущий буфер, либо выйти из vim, если этот буфер единственное окно.
Разбивка окна на несколько подокон и навигация между ними:
Ctrl+w v — ( :vsplit ) разделить окно по вертикали
Ctrl+w s — ( :split ) разделить окно по горизонтали
Ctrl+w f — разделить окно и в новом открыть файл, имя и путь к которому находится под курсором
Ctrl+w q или c — закрыть текущее окно
Ctrl+w n — создать новое окно ( :new filename )
Сtrl+w o — развернуть текущее окно на весь экран, закрыв прочие подокна.
Сtrl+w _ — (нижнее подчеркивание) развернуть окно до максимального размера
Сtrl+w = — Сделать все окна текущего таба одинакового размера
Ctrl+w+ или Ctrl+w- — увеличение или уменьшение размера текущего окна
Esc 5 Ctrl+w+ или Сtrl+w 5+ — Увеличить размер текущего окна сразу на 5 строк/столбцов.Esc 5 Ctrl+w - или Сtrl+w 5- — Уменьшить размер текущего окна сразу на 5 строк/столбцов.
Ctrl+wCtrl+w — переход к следующему подокну
Ctrl+w HJKL — переместить окно влево/вправо/вверх/вниз, плюс перегруппировка компановки окон Ctrl+w hjkl либо курсор — переместить курсор на окно влево/вправо/вверх/вниз
Параметры запуска vim:
vim -o filename1 filename2 — запустить vim с двумя файлами, открытыми в горизонтальных окнах
vim -O filename1 filename2 — запустить vim с двумя файлами, открытыми в вертикальных окнах
vim -d filename1 filename2 — запустить vim с двумя файлами и сравнить их, подсветив отличия.
Помимо окон есть ещё вариант разложить открытые файлы по отдельным вкладкам (Tabs)
:tab ball — Поместить все открытые файлы во вкладки
:tabnew — Создать новую вкладку, чтобы не бить текущее окно на большое количество маленьких подокон
gt — (go to tab) Перейти на следующую вкладку
gT — (go to tab) Перейти на предыдущую вкладку
:tabn — Следующая вкладка
:tabp — Предыдущая вкладка
Ctrl+PageUp и Ctrl+PageDown — стандартные горячие клавиши для перемещения между табами, но они могут быть заняты эмулятором терминала.
:set mouse=a — Если включить, то будет можно мышью выбирать вкладки, окна, и изменять их размер
Вход в модальный режим редактирования текста:
i — Insert, переход в режим вставки текста левее курсора
a — Append, переход в режим вставки текста правее курсора
A — App_end, переход в режим вставки текста в конец строки
R — Replace, переход в режим замены текста.
o — создать пустую строку под текущей и перейти к её редактированию.
O — создать пустую строку НАД текущей и перейти к её редактированию.
Редактирование:
u — UNDO, отмена последнего действия
U — UNDO, отмена изменений только в последней строке
Ctrl+r — Redo, повторить отменённое действие текущего модального сеанса редактирования.
Многие команды, изменяющие текст, состоят из оператора и объекта. Например ниже оператор удаления d комбинируется с объектом направления удаления:
dw — (delete word) удалить от курсора до конца слова, включая последующий пробел.
de — удалить от курсора до конца слова, НЕ включая последующий пробел.
d$ — удалить от курсора до конца строки.
d^ — удалить от курсора до начала строки.
ce — удаляет слово и переводит в режим вставки.
c$ — удалить от курсора до конца строки и перейти в режим вставки (редактирования текста).
Ввод числа перед оператором приведёт к его повторению заданное количество раз.
d2w — Удаление двух слов подряд
x — Del, стереть символ под курсором.
dd — Удаление строки
D (Shift+d)— Вырезать в буфер содержимое от курсора до конца строки.
C (Shift+c)— Вырезать в буфер содержимое от курсора до конца строки и перейти в режим правки.
r — замена символа под курсором следующим за r
После нажатия r+символ возвращается в командный режим, что делает неудобным
использование для правки русского текста без адаптации командного режима
vim к русской раскладке клавиатуры.
diw — (delete inner word) удалить слово под курсором
ciw — (change inner word) заменить слово под курсором (удалить и перейти в режим редактирования)
cib — (change in brackets) Удалить выражение внутри скобок () и перейти к редактированию
c% — Вырезание выражения в парных скобках от курсора до следующих скобок. ( % это Shift+5 )
dit — (delete in tag) Удалить текст внутри html или xml тэга под курсором
cit — (change in tag) Заменить текст внутри html или xml тэга под курсором, (удал. и пер. в реж. ред.)
ce WORD Esc — вводить на первом символе какого-либо слова, чтобы заменить его на WORD. После по точке так можно будет сделать с любым.
d$ или D (Shift+d) — удаляет строку после курсора
db — удалить слово ДО курсора
di( — удаляет то что в скобочках.
di" — то, что в кавычках
ya( — копировать содержимое внутри скобок () вместе с самими скобками
s — Удалить символ под курсором и перейти в режим редактирования
S — Удалить все до конца строки и перейти в режим редактирования
d5d — удалить 5 строк от курсора вниз
Ctrl+a — Увеличить на единицу ближайшее справа число.
Ctrl+x — Уменьшить на единицу ближайшее справа число.
Vu — Перевести строку в нижний регистр
VU — Перевести строку в верхний регистр
g~~ — Инвертировать регистр
Автодополнения:
Ctrl+p или Ctrl+n — автодополнение команд языков программирования
Ctrl+x Ctrl+f — файлы, они ищутся в текущем каталоге
Ctrl+x Ctrl+d — дефайны
Ctrl+x Ctrl+i — слова из текущего и открытых файлов
Ctrl+x Ctrl+k — из словаря
Ctrl+x Ctrl+] — все тэги
Ctrl+x Ctrl+o — omni completion, работает замечательно с C, Python и т.д.
Поиск:
При достижении конца файла поиск будет продолжен с начала.
f — Поиск следующего за f символа справа в текущей строке
; — Повторить поиск по f, следующее найденное совпадение в текущей строке
/ — Поиск текста по образцу вперёд
? — Поиск текста по образцу назад
n — Следующее найденное совпадение
N — Предыдущее найденное совпадение
Ctrl+o — вернуться туда, откуда начали поиск
Ctrl+i — вернуться обратно к найденному после ctrl+o
% — Поиск парных скобок: (), [] или {}
Поиск и замена:
:s/было/стало — Поиск и замена только первого найденного совпадения в текущей строке
:s/было/стало/g — Поиск и замена всех найденных в текущей строке совпадений
:g/string/d Удалить все строки, содержащие «string”
:v/string/d Удалить все строки, не содержащие „string”:30,90s/было/стало/gc — поиск и замена с 30 по 90 строку по всей их длине, с подтверждением
:%s/было/стало/gc — поиск и замена во всём файле с подтверждением.
То есть :s/ — текущая строка, :30,90s/ — диапазон, :%s/ — весь файл.
g — во всей строке, c — с подтверждением, иначе только первое совпадение в строке, и без подтверждений.
Можно не писать каждый раз команду заново, достаточно ввести : двоеточие и стрелками курсора вверх-вниз перебирать ранее введённые варианты.
Выделение:
v — (visual) визуальный выбор, выделение фрагмента текста для операции над ним.
Ctrl+v — выделение прямоугольных блоков.
gv — Повторное выделение последнего выделенного фрагмента.d — удаление выделенного фрагмента
c — Вырезать выделенный фрагмент в буфер обмена
y — (yank) копирование выделенного фрагмента
yw — копирование одного слова от позиции курсора до конца слова вместе с пробелом.
p — (paste) вставка скопированного фрагмента
vip — Выделить целиком текущий параграф (разделённый пустыми строками текст)
vgU — выделить в визуальном режиме фрагмент и перевести его в верхний регистр.
vg~ — Выделить в визуальном режиме фрагмент и ИНВЕРТИРОВАТЬ его регистр.
Комбинации ниже работают для выделенного фрагмента. Для одиночной строки нажать дважды. Изменить длину отступа с 8 на 4 можно через конфиг, либо введя в командном режиме :set tabstop=4
Почему-то не работают для комментариев #
< (Shift+,) — Уменьшить отступ выделенного.
> (Shift+.) — Увеличить отступ выделенного.
Файловые операции:
: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
Настройки:
По уму настройки следует записать в ~/.vimrc (там они пишутся без двоеточия!) тогда не придется их вводить заново.
:set ic — IgnoreCase, игнорирование регистра при поиске или замене
:set noic — вернуть регистрозависимый поиск или замену
:set hls — Hlsearch, подсвечивать найденное
:set nohls — НЕ подсвечивать найденное
:set is — Incsearch, инкрементный поиск — отображение частичных совпадений при поиске
:set nois — Отключить инкрементальный поиск, искать по enter.
:set nu — пронумеровать строки
:set mouse=a — Использовать мышь для выбора окна, позиции курсора.
:syntax on — подсветка кода
Разное:
Ctrl+g — Показывает строку статуса с именем открытого файла, номером текущей строки.
Esc или Ctrl+C или Ctrl+[ — выход в командный режим.:e
Enter — Выход. Именно с ДВОЕТОЧИЕМ! Я сам долго не мог выйти. Решил,
что ':' это часть предложения, а не часть комбинации, которую нужно
набрать и долго жал 'q'.
:e! Enter — Выход без сохранения
:x и :wq — выход с сохранением, причём первая сохраняет только в том случае, если были изменения. :w! или :wq! принудительное сохранение в readonly файле, 2й вариант с выходом.
ZQ — Моментальный выход без сохранения и подтверждения.
Настройки по умолчанию можно записать в конфигурационный файл ~/.vimrc
Например без этого я не начну писать в vim ни одной программы на Python:
set tabstop=4 # Длина табуляции
set expandtab # Замена табуляции пробелами
Полезные хитрости:
:%s#>[^<]\+>##g — Очистить текст от HTML-тегов
:%s/^\(.*\)\n\1$/\1/ — Удалить строки, повторяющиеся дважды
:%s/\s\+$// — Удалить пробелы в конце строк, и строки из одних пробелов (link)
:1,$ g/^$/ d — Удалить пустые строки
:g/^$/d — Удалить пустые строки
Обучающие карты расположения команд в картинках. Взято отсюда:
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
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-[ запустит. (й)
* * *
Q (shift+q) — не режим ввода команд. Это переход в устаревший режим Ex, поддерживаемый только для совместимости. Пользоваться им не стоит. Для возврата в обычный режим наберите „visual“.
* * *
Список использованной и рекомендуемой литературы:
Вступительное слово
Зачем нужна ещё одна, 1001я публикация на эту тему? Статей про vim и nano написано огромное количество, но как правило они касаются только одного из редакторов, либо представляют из себя общий обзор. Чтобы в одной были сжато описаны оба редактора, но при этом без углубления в дебри приведены все основные клавиши управления для полноценной работы, я не не нашёл. Поэтому, почитав найденные материалы, я начал их конспектировать, так и родилась эта статья.
Любой текстовый редактор можно освоить «методом тыка». Но только не vim.
Чем nano лучше vim?
Из nano можно выйти без reset'а! (с) Интернет
Изначально я не планировал писать об обоих редакторах, а хотел сделать краткую справку только по nano, но в процессе сбора информации накопились данные и по vim тоже. Тут я обнаружил, что Vim не так уж и страшен, если знать команды и концепцию его использования.
Что это и зачем нужно?
Когда недоступна графическая среда, например при работе по ssh, настройке системы до загрузки xserver, либо просто из любви к
Я долгое время использовал редактор от Midnight Commander mcedit, немного пользовался nano, и совсем не пользовался vim. Вызубрить все эти комбинации за гранью возможного — даже потратив на это время, через какой-то период простоя они успешно забываются. До того, как я взялся за написание этой статьи, я не мог заставить себя осилить даже азы vim, он пугает уже на стадии запуска, «пытаешься из него сразу же выйти, и не можешь!» Это как вы сейчас зайдёте в интерпретатор ZX Spectrum BASIC48, то не зная азов даже простейшей программы PRINT «Hello World!» не напишите. Я не переставал задавать себе вопрос: «Интересно, и за что гуру vim так любят? Зачем тратить кучу времени на переобучение, и главное как не растерять навыки, для каких целей его постоянно использовать, этот vim?»
Ниже я опишу самые необходимые комбинации клавиш и приёмы работы в обоих редакторах.
Nano
После комбинации Alt-6, как команды «скопировать» я даже и не знаю что сказать
Наверное автор Nano был пианистом
© из хабра-комментариев
Основой мне послужила статья на хабре: "Nano: И всё-таки его придётся выучить", а также все комментарии к ней. Они не просто её дополнили, но и заставили посмотреть в сторону vim.
В терминах 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, немного крипоты
«у 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) убийственный хаброкоммент
Выше показана старая клавиатура IBM PC AT original keyboard. Приглядитесь повнимательнее.
Vim разрабатывался ещё в те времена, когда клавиша Ctrl находилась на месте CapsLock, где удобнее нажимать мизинцем. Как часто вы пользуетесь этой клавишей? А клавишей Ctrl? Но фирма IBM решила иначе, и всё сложилось как сложилось.
Тем не менее, мы попытаемся!
VIM — это слепой десятипальцевый метод редактирования текста. (й) youtube
Следует запомнить, что Vim имеет два режима: командный и модальный. В первом вводятся команды, например просто введя двоеточие : можно стрелками вверх-вниз перебирать историю ранее введённых команд. Введя начало команды, по Ctrl+d можно увидеть список похожих команд, а по Tab дополнить сокращение до полного названия команды. Все команды, начинающиеся с : должны завершаться нажатием ENTER, остальные исполняются моментально. Во втором режиме правится текст. Вход в модальный режим по a, i. После правки фрагмента текста, всегда нажимайте Esc, чтобы вернуться в командный режим, и у вас никогда не возникнет вопроса, в каком режиме сейчас редактор.
Поясняющая цитата о вводе команд: Команды в vim задуманы комбинируемыми: 'd' значит «удалить», 'e' значит
«переместить курсор в конец слова», поэтому 'de' завершенная команда,
означающая «удалить все от текущего положения курсора до следующего
конца слова» Команды регистрозависимы!
Например войдя в модальный режим (редактирование текста) по i, введя «True», и выйдя в командный по Esc,
вы можете перемещаться по файлу со всей мощью команд навигации и нажимать '.'
везде, где нужно повторить команду, то есть вставить слово «True» в
текущую позицию курсора в данном случае. Учитывается весь введённый
фрагмент с перемещениями курсора и стиранием символов. Так можно по
точке автоматизировать ввод форм в одинаковые блоки.
Команды Vim:
Возможно, это только для меня стало внезапным открытием,
но вся справка на русском языке по клавишам vim доступна внутри
терминала в виде уроков по команде (в том числе по ней я делал этот
конспект):
vimtutor ru
Перемещение:
hjkl — дублирование курсорных клавиш влево, вниз, вверх, вправо.
^ или 0 (нуль) — В начало строки
$ — В конец строки
w — Переход к началу следующего слова.e — Переход в конец текущего, затем следующего, слова.E (Shift+e) —Как e только без учета символов препинания.% — Перемещение в строке между скобками: (){}[]
Ввод числа перед оператором перемещения приведёт к его повторению заданное количество раз.
2w — Перемещение курсора вперёд к началу второго слова.
3e — Перемещение курсора вперёд к концу третьего слова.
Комбинирование команд упрощает навигацию: j$ —Вниз, в конец следующей строки.
Alt+{ (Alt+Shift+[) — Переместиться на пустую строку перед текущим параграфом
Alt+} (Altl+Shift+]) — Переместиться на пустую строку после текущего параграфа
Shift+g — Перейти в конец файла. Если перед этим ввести номер строки, то переход к ней.
507 Shift+g — Например вот так будет переход не в конец, а к строке номер 507
:45 Enter или 45gg — Переход к строке номер 45
Вместо k может быть любая маленькая буква для локальных меток, и большая для глобальных, к которым можно обращаться из другого файла.mk — Пометить текущую позицию как k
‘k — Перейти к раннее созданной метке k
'. — (backquote, dot) перейти по автоматической метке в начало последней отредактированной строки.
H, M, L — перемещение курсора на верхнюю, среднюю и нижнюю линию экрана.
zt, zz, zb — перемещение курсора вместе с текстом на верхнюю, среднюю и нижнюю линию экрана.
* — Переместить курсор на следующее слово, такое же, как под курсором
# — Переместить курсор на ПРЕДЫДУЩЕЕ слово, такое же, как под курсором
Оконная навигация — окна и вкладки:
На каждый открытый файл выделяется свой буфер редактирования, которым оперирует пользователь. При нескольких открытых файлах можно переключаться между ними, то есть между их буферами:
:bn — открыть в текущем окне следующий буфер
:bp — предыдущий
:ls — просмотреть список открытых буферов
:b имя_буфера — переключиться на буфер открытого файла, работает автодополнение по Tab.
:bd имя_буфера — удалить буфер по имени:bd — удалить текущий буфер, либо выйти из vim, если этот буфер единственное окно.
Разбивка окна на несколько подокон и навигация между ними:
Ctrl+w v — ( :vsplit ) разделить окно по вертикали
Ctrl+w s — ( :split ) разделить окно по горизонтали
Ctrl+w f — разделить окно и в новом открыть файл, имя и путь к которому находится под курсором
Ctrl+w q или c — закрыть текущее окно
Ctrl+w n — создать новое окно ( :new filename )
Сtrl+w o — развернуть текущее окно на весь экран, закрыв прочие подокна.
Сtrl+w _ — (нижнее подчеркивание) развернуть окно до максимального размера
Сtrl+w = — Сделать все окна текущего таба одинакового размера
Ctrl+w+ или Ctrl+w- — увеличение или уменьшение размера текущего окна
Esc 5 Ctrl+w+ или Сtrl+w 5+ — Увеличить размер текущего окна сразу на 5 строк/столбцов.Esc 5 Ctrl+w - или Сtrl+w 5- — Уменьшить размер текущего окна сразу на 5 строк/столбцов.
Ctrl+wCtrl+w — переход к следующему подокну
Ctrl+w HJKL — переместить окно влево/вправо/вверх/вниз, плюс перегруппировка компановки окон Ctrl+w hjkl либо курсор — переместить курсор на окно влево/вправо/вверх/вниз
Параметры запуска vim:
vim -o filename1 filename2 — запустить vim с двумя файлами, открытыми в горизонтальных окнах
vim -O filename1 filename2 — запустить vim с двумя файлами, открытыми в вертикальных окнах
vim -d filename1 filename2 — запустить vim с двумя файлами и сравнить их, подсветив отличия.
Помимо окон есть ещё вариант разложить открытые файлы по отдельным вкладкам (Tabs)
:tab ball — Поместить все открытые файлы во вкладки
:tabnew — Создать новую вкладку, чтобы не бить текущее окно на большое количество маленьких подокон
gt — (go to tab) Перейти на следующую вкладку
gT — (go to tab) Перейти на предыдущую вкладку
:tabn — Следующая вкладка
:tabp — Предыдущая вкладка
Ctrl+PageUp и Ctrl+PageDown — стандартные горячие клавиши для перемещения между табами, но они могут быть заняты эмулятором терминала.
:set mouse=a — Если включить, то будет можно мышью выбирать вкладки, окна, и изменять их размер
Вход в модальный режим редактирования текста:
i — Insert, переход в режим вставки текста левее курсора
a — Append, переход в режим вставки текста правее курсора
A — App_end, переход в режим вставки текста в конец строки
R — Replace, переход в режим замены текста.
o — создать пустую строку под текущей и перейти к её редактированию.
O — создать пустую строку НАД текущей и перейти к её редактированию.
Редактирование:
u — UNDO, отмена последнего действия
U — UNDO, отмена изменений только в последней строке
Ctrl+r — Redo, повторить отменённое действие текущего модального сеанса редактирования.
Многие команды, изменяющие текст, состоят из оператора и объекта. Например ниже оператор удаления d комбинируется с объектом направления удаления:
dw — (delete word) удалить от курсора до конца слова, включая последующий пробел.
de — удалить от курсора до конца слова, НЕ включая последующий пробел.
d$ — удалить от курсора до конца строки.
d^ — удалить от курсора до начала строки.
ce — удаляет слово и переводит в режим вставки.
c$ — удалить от курсора до конца строки и перейти в режим вставки (редактирования текста).
Ввод числа перед оператором приведёт к его повторению заданное количество раз.
d2w — Удаление двух слов подряд
x — Del, стереть символ под курсором.
dd — Удаление строки
D (Shift+d)— Вырезать в буфер содержимое от курсора до конца строки.
C (Shift+c)— Вырезать в буфер содержимое от курсора до конца строки и перейти в режим правки.
r — замена символа под курсором следующим за r
После нажатия r+символ возвращается в командный режим, что делает неудобным
использование для правки русского текста без адаптации командного режима
vim к русской раскладке клавиатуры.
diw — (delete inner word) удалить слово под курсором
ciw — (change inner word) заменить слово под курсором (удалить и перейти в режим редактирования)
cib — (change in brackets) Удалить выражение внутри скобок () и перейти к редактированию
c% — Вырезание выражения в парных скобках от курсора до следующих скобок. ( % это Shift+5 )
dit — (delete in tag) Удалить текст внутри html или xml тэга под курсором
cit — (change in tag) Заменить текст внутри html или xml тэга под курсором, (удал. и пер. в реж. ред.)
ce WORD Esc — вводить на первом символе какого-либо слова, чтобы заменить его на WORD. После по точке так можно будет сделать с любым.
d$ или D (Shift+d) — удаляет строку после курсора
db — удалить слово ДО курсора
di( — удаляет то что в скобочках.
di" — то, что в кавычках
ya( — копировать содержимое внутри скобок () вместе с самими скобками
s — Удалить символ под курсором и перейти в режим редактирования
S — Удалить все до конца строки и перейти в режим редактирования
d5d — удалить 5 строк от курсора вниз
Ctrl+a — Увеличить на единицу ближайшее справа число.
Ctrl+x — Уменьшить на единицу ближайшее справа число.
Vu — Перевести строку в нижний регистр
VU — Перевести строку в верхний регистр
g~~ — Инвертировать регистр
Автодополнения:
Ctrl+p или Ctrl+n — автодополнение команд языков программирования
Ctrl+x Ctrl+f — файлы, они ищутся в текущем каталоге
Ctrl+x Ctrl+d — дефайны
Ctrl+x Ctrl+i — слова из текущего и открытых файлов
Ctrl+x Ctrl+k — из словаря
Ctrl+x Ctrl+] — все тэги
Ctrl+x Ctrl+o — omni completion, работает замечательно с C, Python и т.д.
Поиск:
При достижении конца файла поиск будет продолжен с начала.
f — Поиск следующего за f символа справа в текущей строке
; — Повторить поиск по f, следующее найденное совпадение в текущей строке
/ — Поиск текста по образцу вперёд
? — Поиск текста по образцу назад
n — Следующее найденное совпадение
N — Предыдущее найденное совпадение
Ctrl+o — вернуться туда, откуда начали поиск
Ctrl+i — вернуться обратно к найденному после ctrl+o
% — Поиск парных скобок: (), [] или {}
Поиск и замена:
:s/было/стало — Поиск и замена только первого найденного совпадения в текущей строке
:s/было/стало/g — Поиск и замена всех найденных в текущей строке совпадений
:g/string/d Удалить все строки, содержащие «string”
:v/string/d Удалить все строки, не содержащие „string”:30,90s/было/стало/gc — поиск и замена с 30 по 90 строку по всей их длине, с подтверждением
:%s/было/стало/gc — поиск и замена во всём файле с подтверждением.
То есть :s/ — текущая строка, :30,90s/ — диапазон, :%s/ — весь файл.
g — во всей строке, c — с подтверждением, иначе только первое совпадение в строке, и без подтверждений.
Можно не писать каждый раз команду заново, достаточно ввести : двоеточие и стрелками курсора вверх-вниз перебирать ранее введённые варианты.
Выделение:
v — (visual) визуальный выбор, выделение фрагмента текста для операции над ним.
Ctrl+v — выделение прямоугольных блоков.
gv — Повторное выделение последнего выделенного фрагмента.d — удаление выделенного фрагмента
c — Вырезать выделенный фрагмент в буфер обмена
y — (yank) копирование выделенного фрагмента
yw — копирование одного слова от позиции курсора до конца слова вместе с пробелом.
p — (paste) вставка скопированного фрагмента
vip — Выделить целиком текущий параграф (разделённый пустыми строками текст)
vgU — выделить в визуальном режиме фрагмент и перевести его в верхний регистр.
vg~ — Выделить в визуальном режиме фрагмент и ИНВЕРТИРОВАТЬ его регистр.
Комбинации ниже работают для выделенного фрагмента. Для одиночной строки нажать дважды. Изменить длину отступа с 8 на 4 можно через конфиг, либо введя в командном режиме :set tabstop=4
Почему-то не работают для комментариев #
< (Shift+,) — Уменьшить отступ выделенного.
> (Shift+.) — Увеличить отступ выделенного.
Файловые операции:
: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
Настройки:
По уму настройки следует записать в ~/.vimrc (там они пишутся без двоеточия!) тогда не придется их вводить заново.
:set ic — IgnoreCase, игнорирование регистра при поиске или замене
:set noic — вернуть регистрозависимый поиск или замену
:set hls — Hlsearch, подсвечивать найденное
:set nohls — НЕ подсвечивать найденное
:set is — Incsearch, инкрементный поиск — отображение частичных совпадений при поиске
:set nois — Отключить инкрементальный поиск, искать по enter.
:set nu — пронумеровать строки
:set mouse=a — Использовать мышь для выбора окна, позиции курсора.
:syntax on — подсветка кода
Разное:
Ctrl+g — Показывает строку статуса с именем открытого файла, номером текущей строки.
Esc или Ctrl+C или Ctrl+[ — выход в командный режим.:e
Enter — Выход. Именно с ДВОЕТОЧИЕМ! Я сам долго не мог выйти. Решил,
что ':' это часть предложения, а не часть комбинации, которую нужно
набрать и долго жал 'q'.
:e! Enter — Выход без сохранения
:x и :wq — выход с сохранением, причём первая сохраняет только в том случае, если были изменения. :w! или :wq! принудительное сохранение в readonly файле, 2й вариант с выходом.
ZQ — Моментальный выход без сохранения и подтверждения.
Настройки по умолчанию можно записать в конфигурационный файл ~/.vimrc
Например без этого я не начну писать в vim ни одной программы на Python:
set tabstop=4 # Длина табуляции
set expandtab # Замена табуляции пробелами
Полезные хитрости:
:%s#>[^<]\+>##g — Очистить текст от HTML-тегов
:%s/^\(.*\)\n\1$/\1/ — Удалить строки, повторяющиеся дважды
:%s/\s\+$// — Удалить пробелы в конце строк, и строки из одних пробелов (link)
:1,$ g/^$/ d — Удалить пустые строки
:g/^$/d — Удалить пустые строки
Приложение:
Обучающие карты расположения команд в картинках. Взято отсюда:
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
Решение проблем:
Простое решение проблемы командного режима в русской раскладке, положить в файл ~/.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-[ запустит. (й)
* * *
Q (shift+q) — не режим ввода команд. Это переход в устаревший режим Ex, поддерживаемый только для совместимости. Пользоваться им не стоит. Для возврата в обычный режим наберите „visual“.
* * *
Список использованной и рекомендуемой литературы:
- Статьи на хабре:
https://habrahabr.ru/hub/vim/
- Почему, ну почему, эти #?@! придурки используют vi? (отличная статья! А комменты просто жгут)
https://habrahabr.ru/post/307084/
- Vim и кириллица: парочка приёмов
https://habrahabr.ru/post/98393/
- Аж целую книгу запилили по этому vim, я удивляюсь. Нашёл
на файлопомойкетут:
http://mirrors.pdp-11.ru/_books/desktop%20soft/vim/
- Прямая ссылка на книгу:
O'Reilly — Learning the vi and Vim Editors 7th Edition (перевод).pdf
- Книга «Просто о Vim» («A Byte of Vim») русский перевод.
Скачать в формате .odt или .pdf
- Vimtouch под Android. Если готовый в googleplay:
https://github.com/momodalo/vimtouch
- 100 команд vim, которые должен знать каждый
http://scabere.livejournal.com/62886.html
- Окна и буферы — Навигация
https://habrahabr.ru/post/28572/
- Vim Golf — Задачи и решения по vim
http://www.vimgolf.com/
- Много приёмов работы с vim
http://najomi.org/vim
- Настраиваем Vim под Python
https://habrahabr.ru/post/74128/
- VIM как IDE для разработки на Python
https://habrahabr.ru/post/224979/
- Vim как IDE для веб-разработки
https://habrahabr.ru/post/53435/
- Окна и буферы
https://habrahabr.ru/post/28572
- Многооконный режим редактирования файлов в Vim
https://www.opennet.ru/tips/1714_vip_edit_text.shtml
- Хороший, почти как vimtutor, цикл видео уроков по vim.
https://www.youtube.com/playlist?list=PLcjongJGYetkY4RFSVftH43F91vgzqB7U