Командный и визуальный режимы Vim
Называя приведенные в предыдущем разделе комбинации клавиш командами, я нарочно отошел от стандартной терминологии Vim, чтобы как можно более четко объяснить, как это все работает. На самом деле в Вим есть отдельный командный режим, больше похожий на классическую командную строку, и он позволяет делать еще более продвинутые вещи.
Командный режим доступен по вводу символа : в обычном режиме. Он предназначен для построчного редактирования текста с помощью сложных команд, которые могут включать в себя регулярные выражения и даже запуск команд самой операционный системы.
Одна из самых известных команд данного режима — :s. Она предназначена для поиска и замены слов. С ее помощью второй пример из предыдущего раздела можно было бы решить так:
s/Windows/Linux/
Такая команда заменит первое встреченное в текущей строке слово Windows на Linux. Чтобы заменить все слова Windows на Linux в текущей строке можно использовать модификатор g:
s/Windows/Linux/g
А вместо искомого слова использовать регулярное выражение:
s/Windows/Linux/
Операцию замены можно расширить на весь файл указав перед командой знак процента:
%s/Windows/Linux/g
А можно натравить ее только на нужный диапазон строк:
1,10s/Windows/Linux/g
Или на текст между двумя метками:
1,10s/Windows/Linux/g
Удобнее всего использовать командный режим сочетании с визуальным. Последний представляет собой режим выделения, которого не было в редакторе Vi. Работает он так: вы переходите на строку, с которой хотите начать выделение текста, затем нажимаешь v (или Shift+V для построчного выбора) и выделяете текст с помощью любых стандартных команд перемещения (например, } чтобы выделить текущий абзац). Затем вы можете либо выполнить команду редактирования (например, d, чтобы удалить выделенный текст), либо перейти в командный режим и выполнить над ним более сложную операцию.
Визуальный режим Vim
Вторая из наиболее часто используемых команд — :g. Это встроенный grep, с помощью которого можно искать строки и выполнять над ними действия. Например, следующая команда удалит все строки, содержащие Windows во всем файле:
%g/Windows/d
А такая команда удалит все пустые строки (содержащие только пробелы):
g/^s*$/d
Следующая команда удалит пустые строки (не содержащие ни одного символа) в HTML-таблице:
/,/
/g/^$/d
Строки можно перемещать, например, чтобы переместить все строки, содержащие «Windows», в конец файла, набирай:
g/Windows/m$
Это далеко не все, что может делать встроенный grep. Однако если мы будем вдаваться в подробности, они не влезут ни в какую статью. Вместо этого посмотрим, что еще умеет командная строка Vim.
С ее помощью удобно вставлять в текст содержимое других файлов или вывод команд Unix. Например, так можно вставить в текст содержимое файла todo.txt:
rtodo.txt
Команда :r поддерживает автодополнение, поэтому вбивать полный путь не придется.
Если добавить к r восклицательный знак — она вставит в текст вывод указанной команды:
r!uname-a
Когда ты пишешь статью в «Хакер» с кучей цитат из вывода команд, такая функция становится просто незаменимой.
Vim позволяет не только читать вывод команд Unix, но и отправлять текст им на вход. Например, следующая команда отсортирует строки с 1 по 10 с помощью sort:
1,10!sort
Отсортировать весь файл:
%!sort
Прогнать файл через форматтер fmt:
%!fmt
Конечно же, все это работает в том числе в визуальном режиме.
Использование
Начинаем
В Vim есть встроенный учебник, который требует около 30 минут на изучение. Запустите его, используя команду vimtutor:
Color schemes
About a dozen color schemes are shipped with the base Vim package. They can be listed in last line mode by typing colorscheme, then pressing either Ctrl+d or pressing the Tab key twice:
blue darkblue default delek desert elflord evening industry koehler morning murphy pablo peachpuff ron shine slate torte zellner
They can be changed in Vim by using the colorscheme (alternatively use colo) command while in last line mode:
Color schemes can be permanently applied in the .vimrc file:
Файл
colorscheme peachpuff syntax on
The first line sets the default color scheme while the last line activates the color scheme.
Советы и хитрости
Использование Vim в качестве ex или ed
Vim можно использовать для создания однострочников — выполняющихся без человеческого участия команд, применимых в скриптах или при работе из командной строки.
К примеру, следующая команда добавляет в начало каждой строки файла file.txt:
Что тут происходит? Vim интерпретирует переданные ему (через параметр ) команды. Первой идет команда поиска и замены Vim (очень похожая на аналогичную команду sed), второй — команда сохранения файла и выхода из редактора.
Изменение кодировки файла
Чтобы изменить кодировку файла на UTF-8, используйте следующую команду (в командном режиме Vim):
Как показано в предыдущем примере, можно сделать это и из командной строки:
Vim Guide — Более подробно объясняет, как использовать Vim.
Find and till[]
It’s rewarding to become familiar with the ‘find’ and ’till’ commands.
- Jump to a character in the same line: fx to find the next ‘x’ in the line, and Fx to find the previous one.
- ‘Till’ is similar: tC to jump till just before the next ‘C’ in the line, and TC to jump till just after the previous one.
- Use , and ; to jump to the previous and next occurrence of the character found with t, T, f, or F.
- In the above, x is any character, including Tab (press f then Tab to jump to the next Tab on the current line).
Magic happens when you combine the motions find and till with operators:
- ctx change all text till the next ‘x’ (x is any character; x is not changed).
- cfx same, but include the ‘x’.
- You are now in insert mode. Type the replacement text, then press Esc.
- dtx delete all text till the next ‘x’.
- dfx same, but include the ‘x’.
- Want to do it again? Save a keystroke with d; or save two with . (see repeat).
- Example: You are at the start of a line:
- Type dt( to delete from the cursor till ‘(‘, with result:
- Type . to repeat, with result:
КАК ИСПОЛЬЗОВАТЬ РЕДАКТОР VIM
Начнем мы, как обычно с запуска программы, а также опций, которые ей можно передать. Синтаксис Vim очень прост:
$ vim опции имя_файла
Или:
$ vi опции имя_файла
Простой запуск vim без указания имени файла приведет к созданию пустого файла. А теперь давайте рассмотрим основные опции запуска:
- +номер — переместить курсор к указной строке после запуска.
- +/шаблон — выполнить поиск по шаблону и переместить курсор к первому вхождению
- «+команда» — выполнить команду после запуска программы
- -b — двоичный режим, для редактирования исполняемых файлов.
- -d — режим поиска различий в файлах, нужно указать несколько файлов для открытия.
- -g — графический режим.
- -n — не использовать автосохранение для восстановления файла при сбое.
- -R — режим только для чтения.
- -w — сохранить все действия в файл.
- -x — шифровать файл при записи.
- -C — режим совместимости с Vi.
Круто, правда? Но это только начало. Опции ничего по сравнению с командами редактора.
Быстрый старт
Открываем файл в текстовом редакторе командой vi /путь/имя_файла, например:
Команда sudo используется в том случае, если для открытия файла нужны повышенные привилегии (например, редактирование системных конфигурационных файлов). Указанный файл откроется в текстовом редакторе:
Скриншот №1. Команда sudo
Перемещаем курсор по тексту с помощью стрелок или клавиш h (влево), l (вправо), j (вниз), k (вверх) до нужного места в тексте.
Переводим открытый файл в режим редактирования текста нажатием клавиши i (раскладка клавиатуры должна быть англоязычной). В результате в нижней части экрана появится индикация режима работы — INSERT:
Скриншот №2. Режим редактирования текста
Вносим в текст необходимые корректировки.
Выходим из режима редактирования нажатием клавиши Esc — индикатор INSERT в нижней части экрана должен исчезнуть.
Теперь необходимо закрыть файл, сохранив внесенные изменения. Для этого набираем:
Данный набор символов также должен отобразиться в нижней части окна. Буква w помогает сохранить файл на диск (write), q — завершить работу редактора (quit):
Скриншот №3. Сохранение изменений в файле
Если же что-то пошло не так и вам необходимо закрыть редактор не сохраняя изменения в файле, просто введите команду:
МИНИМАЛЬНЫЕ ОСНОВЫ
На данный момент существует две версии редактора — vi и vim. Vim расшифровывается как Vi Improved, улучшенный vi. Это новая версия, которая принесла очень много улучшений. В большинстве современных дистрибутивов используется именно она. Поэтому если я буду писать vi, это значит, что я предполагаю использование vim.
Текстовый редактор Vim может работать в двух режимах. Это и есть его главная особенность. Первый режим, который используется по умолчанию при открытии редактора — это командный. В этом режиме вы можете вводить команды vi, а также использовать символьные клавиши для управления редактором. Второй режим — обычное редактирование текста, он работает так же как и редактирование текста в nano. Для переключения в командный режим используется клавиша Esc. Для переключения в режим редактирования — клавиша i. Если вас интересует только как в редакторе vi сохранить и выйти, листайте вниз, но если вы хотите узнать как пользоваться текстовым редактором vim, эта статья для вас.
Перед тем как идти дальше я бы посоветовал вам пройти курс обучения встроенный в редакторе. Выполнение всех обучающих заданий займет 25-30 минут. Но после того как вы освоите все что там написано, эта статья поможет вам закрепить материал. Дело в том, что команд и сочетаний клавиш у vim очень много и запомнить их все без практики невозможно. Для запуска обучения наберите:
Но делать это сейчас необязательно, в этой статье есть вся необходимая базовая информация и после ее прочтения вы уже сможете уверенно пользоваться vim, а обучение пройти чуть позже.
Советы и рекомендации
Нумерация строк
Чтобы включить отображение номера столбца, используйте . По умолчанию показываются абсолютные значения номеров строк, относительные включаются посредством .
Переход к новой строке осуществляется посредством или . Все переходы запоминаются в лист переходов, для более подробной информации смотрите .
Проверка орфографии
Проверку орфографии в Vim можно включить с помощью:
set spell
Действие | Команда |
---|---|
следующая ошибка | |
предыдущая ошибка | |
предложения для исправления | |
добавить правильное написание | |
добавить правильное написание (на сеанс) | |
добавить неправильное написание | |
добавить неправильное написание (на сеанс) | |
повторить проверку орфографии во всем файле |
Совет:
- Чтобы включить проверку сразу для двух языков (например, английского и русского), добавьте в или и перезапустите Vim.
- Вы можете включить проверку орфографии для конкретных типов файлов (например .txt), используя плагин FileType и собственное правило для определения типа файла. Чтобы включить проверку орфографии для всех файлов, оканчивающихся на .txt, создайте файл и вставьте туда строку: . Далее, вставьте строку в файл или и перезапустите Vim. Или поместите строку в или и перезапустите Vim. Не забудьте отредактировать строчку (specifically ), чтобы включить соответствующие типы файлов для проверки орфографии.
- Чтобы включить проверку орфографии только для документов LaTeX (или TeX), добавьте в файл или и перезапустите Vim.
Запуск Vim по команде vi
Создайте для на .
Если вы хотите, чтобы при вводе запускался , то установите пакет AUR, который удалит и заменить его символической ссылкой на .
Возврат каретки DOS/Windows
Если вы видите последовательность в конце каждой линии, это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. Дело в том, что в Linux для переноса принято использовать один символ новой строки (LR), тогда как в системах Windows/MS DOS для той же цели используется последовательность из двух символов: возврата каретки (CR) и новой строки (LR). Как раз эти символы возврата каретки и отображаются в виде .
Для удаления всех символов возврата каретки из файла, выполните:
:%s/^M//g
Обратите внимание, что здесь — управляющий символ, а не обычный. Чтобы ввести управляющую последовательность , нажмите .. Также вы можете просто установить пакет и исправлять файлы командой .
Также вы можете просто установить пакет и исправлять файлы командой .
Примечание: Другой простой способ заключается в изменении опции . Используйте для преобразования файлов с окончанием строки DOS/Windows в файлы с окончанием строки Unix. Для того, чтобы сделать обратное, просто используйте .
Пустое пространство в нижней части окон gVim
Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.
Решение заключается в регулировании количества места, которое будет резервировать в нижней части окна gVim. Поместите следующую строку в :
set guiheadroom=0
Примечание: Установив значение 0, вы не сможете видеть горизонтальную полосу прокрутки внизу окна.
Saving and quitting[]
Save the current file by entering (which always writes the file even if it has not changed), or (which only writes the file if it has changed). That is, press Esc to enter normal mode if necessary, then press the key, then the key, then press Enter. If Vim indicates a problem (for example, the file was flagged as read-only in Vim, or the file has been modified by another program since you began editing), you can use to force Vim to write the file anyway.
If you are not editing an existing file (for example if you launched Vim with no arguments), you will need to provide a file name when you save. You can do this with or , for example, .
After saving your changes, you can quit Vim with . Or the saving and quitting can be combined into one operation with or .
If you want to discard any changes, enter to quit Vim without saving.
It is possible to have more than one file open in Vim, and there are commands for saving or quitting when working with multiple files (see :help window-exit):
write all changed files (save all changes) | |
exit all (save all changes and close Vim) | |
quit all (close Vim, but not if there are unsaved changes) | |
quit all (close Vim without saving—discard any changes) |
The word «file» was used above, although the correct term is «buffer». A buffer is an area used by Vim to store a collection of text. Usually, a buffer has an associated file: to start, a buffer is filled by reading its file, and the buffer can be saved by writing to its file. A file is read into a buffer when you start Vim with a file name argument (for example, ), or when you issue the (edit) command within Vim.
However, it is easy to have buffers that are not associated with a file. Examples are starting Vim with no argument (which gives an empty buffer with no file name), or entering to create a new buffer within Vim.
Текстовый редактор Vim
По началу Вим оставляет весьма странные ощущения, ведь вы попросту не можете понять, как вообще работает этот редактор. То он вообще не реагирует на нажатия клавиш, то делает какие-то странные вещи. Например, вы пытаетесь написать door, а в результате получаете or да еще и в новой строке. Удалив это вы вновь пытаетесь ввести новое слово, но теперь редактор ведет себя адекватно и вы видите введенное вами слово, а потом снова какие-то непонятки.
Спустя несколько попыток разобраться, как это работает, и бесчисленное количество матерных слов ты идешь в интернет и узнаешь, что Vim — двухрежимный редактор. Писать текст здесь можно только в режиме ввода (INSERT), для перехода в который следует нажать кнопку i или Insert.
Основной же режим, для выхода в который используется Esc, здесь предназначен для ввода, как тебе на первый взгляд кажется, хоткеев. Причем состоять они могут всего из одной клавиши: w — передвигает курсор к следующему слову, 0 — в начало строки, $ — в конец строки, A переводит курсор в конец строки и переключает редактор в режим ввода, u — аналог Ctrl-Z в нормальных редакторах.
Погуглив еще немного, ты обнаруживаешь, что есть также «хоткеи» из двух и более последовательных нажатий. Такие, как, например, dd, который удаляет всю строку и dw, удаляющий слово, gg и GG, которые перемещают курсор в начало и конец документа.
Немного привыкнув, ты уже можешь кое-как прыгать между режимами и вводить эти странные хоткеи — они даже начинают казаться тебе удобными, но один вопрос все-таки тебя не покидает:
«Хоткеи» Vim действительно удобны благодаря своей лаконичности, но разве необходимость переключения между режимами не убивает все их удобство? Разве не проще нажимать пусть и требующие больше движений горячие клавиши в нормальных редакторах, чем мотаться взад-вперед между режимами? Да, может быть сорок лет назад, когда на клавиатурах не было Ctrl и Alt, это и было оправдано, но сейчас-то зачем?
Так и заканчивает знакомство с Vim среднестатистический пользователь. Некоторое время он, конечно, еще потратит на то, чтобы найти выход, но затем забудет как страшный сон и вернется к своему любимому Sublime. А уж в условиях сурового сервера и nano сойдет.
Почему так происходит? По одной простой причине: для работы с Vim нужна совсем другая система мышления, переключиться на которую мало кому удается сразу.
23 мая 2017 года вопрос «Как выйти из Vim набрал один миллион просмотров на StackOverflow»
Установка
USE flags for
app-editors/vim
Vim, an improved vi-style text editor
Link console vim against X11 libraries to enable title and clipboard features in xterm | |
Add support for Access Control Lists | |
Use dev-libs/libsodium for crypto support | |
Enable cscope interface | |
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces | |
Add support for sys-libs/gpm (Console-based mouse driver) | |
Enable Lua scripting support | |
Install a very minimal build (disables, for example, plugins, fonts, most drivers, non-critical features) | |
Add Native Language Support (using gettextGNU locale utilities) | |
Add optional support/bindings for the Perl language | |
Add optional support/bindings for the Python language | |
Enable support for Scheme using dev-scheme/racket | |
Add support/bindings for the Ruby language | |
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur | |
Enable sound support | |
Add support the Tcl language | |
Enable terminal emulation support | |
Install vimpager and vimmanpager links |
Плагины
Категория app-vim содержит множество дополнительных спецификаций синтаксиса, плагины и прочие вещи, относящиеся к Vim.
Используйте emerge или eix, чтобы получить обзор существующих пакетов в категории app-vim:
Movement and more[]
- Hands on the home row asdf hjkl.
- hjkl move in normal mode: h is left and moves left; l is right and moves right; j looks like a down arrow and moves down; k moves up.
- w moves one word forward; 3w moves three words forward; b moves one word backward; 3b moves three words backwards.
- gg moves to first line, G moves to last line, 123G moves to line number 123.
- More moving: 8k moves eight lines up, 5j moves five lines down, 4l moves four characters right, 23h moves 23 characters left.
- opens command line to enter «ex» commands :help ex-cmd-index
- ! after an ex command ignores warnings from many commands, or changes the behavior subtly for others.
- Objects and actions: at beginning of word: d2w (action)(times)(object) (delete)(2)(words forward) this deletes including the trailing space; use de to delete to end of word (leaving the trailing space).
- d2b (delete)(2)(words backward).
- hjkl are also objects! example: d3l (delete)(3)(right), for hl we count individual characters, not words, for jk we count individual lines, d3k delete 4 lines up (3 plus current).
- cw (change)(word), c3w (change)(3)(words). «Change» means delete the current text and enter insert mode in its place.
- cb (change)(word backward), c3b (change)(3)(words backwards).
- Why c and d? Use cw to delete word and enter insert mode (so you can type a new word finishing with Esc). Use dw to delete word, staying in normal mode.
- Use u to undo and Ctrl-r to redo, multiple times.
- Autocompletion: «whatchamacallit» need to type it again? Type wh then press Ctrl-p to find the previous word that starts with «wh». Ctrl-p and Ctrl-n cycle through matches in previous and next order.
- Visual mode: v3w (visual select)(3)(words); change selection with b and hjkl*.
- After selecting: y will «yank» (copy); p will «put» (paste) at a new location (after the cursor; use P for before the cursor). Use y in visual mode and p in normal mode.
- Convenience commands: dd delete current line; yy yank current line.
- Searching: /regularexpression to search forward, ?regularexpression search backward; press n for next hit, or N for previous.
- As before we can combine objects for more: y/) will yank everything to NEXT parens (or whatever you search for) while y?) will yank everything up to the PREVIOUS parens.
Плагины
Плагины могут помочь повысить эффективность вашей работы в Vim. Они могут менять интерфейс Vim, добавлять новые команды, поддержку завершения кода, интеграцию других программ и утилит с Vim, поддержку дополнительных языков и многое другое.
Совет: For a list of popular plugins, see Vim Awesome)
Установка
Используя встроенную систему управления пакетами
В Vim 8 добавлена возможность загрузки сторонних плагинов. Чтобы использовать эту функциональность, переместите плагины в .
Используя менеджер плагинов
Менеджер плагинов позволяет устанавливать плагины и управлять ими одинаковым образом независимо от того, на какой системе вы запускаете Vim. Он представляет собой специальный плагин, который выполняет роль пакетного менеджера для других плагинов.
Из репозиториев Arch
Группа объединяет множество разнообразных плагинов. Используйте команду для отображения списка пакетов, которые вы можете затем , используя pacman.
cscope
Установите пакет .
Скопируйте стандартный файл cscope, который Vim будет автоматически читать:
Примечание: Вам наверное понадобится откомментировать следующие строки в , чтобы включить горячие клавиши cscope в Vim 7.x:
set timeoutlen=4000 set ttimeout
Создайте файл, который содержит список файлов для индексации (cscope может обрабатывать множество языков, но для примера мы возьмем файлы на Си/Си++ с расширениями .c, .cpp и .h):
cd /путь/к/каталогу/проекта find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files
Создание файлы базы данных, которые cscope будет читать:
cscope -bq
Примечание: cscope ищет файл в рабочем каталоге, поэтому тот же каталог следует использовать и для навигации по проекту в Vim. Также, вы можете указать путь до этого файла явно, установив его в переменной окружения .
Горячие клавиши по умолчанию:
Ctrl-\ и c: найти функции вызывающие эту функцию d: найти функции вызываемые этой функцией e: найти egrep паттерн f: найти этот файл g: найти это определение i: найти файлы, включающие этот файл (#include) s: найти этот символ Си t: найти присвоения
Не стесняйтесь изменять горячие клавиши:
#Maps ctrl-c to find functions calling the function nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>
Установите пакет AUR.
Полезные опции можно записать в :
let Tlist_Compact_Format = 1 let Tlist_GainFocus_On_ToggleOpen = 1 let Tlist_Close_On_Select = 1 nnoremap <C-l> :TlistToggle<CR>
ПОИСК И ЗАМЕНА В VIM
Довольно часто нам нужно найти определенную последовательность в тексте. Текстовый редактор Vim умеет это делать.
Во-первых, если нужно найти символ в строке, нажмите f и наберите нужный символ, курсор будет перемещен к его позиции.
Для поиска по всему файлу используйте команду /. После нее нужно ввести слово, которое нужно найти. Для поиска следующего вхождения используйте n, для предыдущего — N.
Для замены будет использоваться немного другая конструкция:
Двоеточие запускает командную оболочку с командой s для замены. Символ % означает что обрабатывать нужно весь файл, а g значит, что нужно обработать все найденные строки, а не только первую. Чтобы программа спрашивала перед каждой заменой можно добавить в конец строки опцию c.
Выводы
Vim нельзя воспринимать как просто еще один текстовый редактор. Это нечто сродни командной строке Unix. Те, кто не умеют ее использовать, считают командную строку анахронизмом. Те, кто умеют и знают, используют ее постоянно и выполняют свои задачи намного быстрее и эффективнее людей, предпочитающих графический интерфейс.
Как и у командной строки, у Вим очень высокий порог вхождения. Его нельзя просто запустить и начать использовать. Сначала вы должны понять, как он работает, на каких принципах базируется и почему он именно такой, какой есть. Затем вам придется заучить множество команд, попрактиковаться, набить руку и только тогда Vim станет для вас действительно удобным, и вы уже не променяете его ни на какой другой редактор.
По статистике одной фирмы пользователей Vim берут на работу чаще, чем остальных
Зависит от того, насколько часто вы работаете с текстовыми данными: пишите статьи, код, редактируете HTML. Vim может сделать эту работу намного более эффективной. При этом навыки пригодятся и при работе в других программах — плагины с режимом Вим есть почти для всех популярных сред разработки. Я, к примеру, использую плагин IdeaVim в Android Studio. Он позволяет получить мощь команд Vim, не отказываясь от богатых возможностей среды Idea.