====== Vim ======
{{ ::vim_1.png?600 |}}
----
===== Отличия от Vi =====
В сравнении с классическим vi Vim отличается следующими улучшениями:
* Работа со многими файлами одновременно. Разбиение окон редактирования может производиться многократно как по горизонтали, так и по вертикали.
* Поддержка Unicode.
* Поддержка визуального режима, который позволяет, например, выполнять операции над блоками текста.
* Неограниченная глубина отмены (undo) и возврата (redo) действий.
* Режим сравнения двух файлов, перенос отдельных изменений из одного файла в другой.
* Широкая файловая поддержка (файл со справкой и более 200 файлов с описанием синтаксиса).
* Подсветка синтаксиса, автоматическое определение величины отступа для каждой строки в зависимости от языка программирования (изначально поддерживает более 200 языков программирования и форматов конфигурационных файлов).
* Интеграция с операционной системой, дающая возможности, близкие к интегрированным средам разработки, такие как поиск ошибки по сообщению компилятора, автодополнение идентификаторов и др.
* Поддержка языка сценариев; возможность написания модулей расширения — плагинов.
* Автоматическое продолжение команд, слов, строк целиком и имён файлов.
* Автоматический вызов внешних команд (например, автоматическая распаковка файла перед редактированием).
* Распознавание и преобразование файлов различных форматов.
* Удобный механизм истории команд, поисковых слов и т. д.
* Запись и исполнение макросов.
* Возможность сохранения настроек и сеанса.
* Возможна интеграция с языками программирования Perl, Tcl, Python и Ruby.
* Поддержка языков с письмом справа налево (арабских и других).
* Сворачивание (folding) текста для лучшего обзора.
* Возможно использование графического интерфейса в специальных версиях (GTK, Motif, …).
* Хорошо конфигурируется и настраивается под нужды пользователя.
* Для программистов: поддержка цикла разработки «редактирование — компиляция — исправление» программ. Автоматическое выполнение сборки/компиляции, обнаружение и распознавание ошибок, переход к строкам ошибок в тексте программы.
* Для поклонников vi: практически стопроцентная совместимость с vi.
----
===== Горячие клавиши =====
^ Помощь ^^
| **%%:help%%** | Вывести краткую справку и завершить работу. То же, что и "-h". |
| **%%:help j%%** | Вывести справку по команде 'j'. |
| **%%:help :split%%** | Вывести справку по команде ':split'. |
| **%%:help z*%%** | Вывести справку по всем командам, начинающимся с 'z'. |
| **%%%%** | Перейти к тэгу под курсором. |
| **%%%%** | Перейти на предыдущую страницу справки. |
| **%%%%** | Перейти на следующую страницу справки.|
^ Отмена и повтор операции ^^
| **%%u%%** | Отменить действие. |
| **%%%%** | Восстановить отменённое действие / повторить последнюю команду редактирования. |
| **%%:redo%%** | Восстановить отменённое действие / повторить последнюю команду редактирования. |
^ Перемещение между строками ^^
| **%%0%%** | Перейти в начало текущей строки. |
| **%%^%%** | Перейти к первому непробульному символу в текущей строке. |
| **%%$%%** | Перейти в конец текущей строки. |
| **%%gg%%** | Перейти на первую строку в файле. |
| **%%G%%** | Перейти на последнюю строку в файле. |
| **%%47G%%** | Перейти на строку 47. |
| **%%:47%%** | Перейти на строку 47 (альтернативный способ). |
^ Перемещение между символами ^^
| **%%f [char]%%** | Поиск вперёд в строке символа [char] и установка курсора на него. |
| **%%3f [char]%%** | Поиск вперёд в строке третий символ [char] и установка курсора на него. |
| **%%F [char]%%** | Поиск назад в строке символа [char] и установка курсора на него. |
| **%%t [char]%%** | Поиск вперёд в строке символа [char] и установка курсора после него. |
| **%%T [char%%** | Поиск назад в строке символа [char] и установка курсора после него. |
| **%%;%%** | Повтор поиска вперёд символа, найденного при помощи **%%f/t/F/T%%**. |
| **%%,%%** | Повтор поиска назад символа, найденного при помощи **%%f/t/F/T%%**. |
^ Перемещение между словами и навигация в тексте ^^
| **%%w%%** | Перейти к началу следующего слова. |
| **%%W%%** | Перейти к началу следующего слова, отделённого пробельными символами с двух сторон. |
| **%%e%%** | Перейти к концу ближайшего слова. |
| **%%E%%** | Перейти к концу ближайшего слова, отделённого пробельными символами с двух сторон. |
| **%%b%%** | Перейти к началу предыдущего слова. |
| **%%B%%** | Перейти к началу предыдущего слова, отделённого пробельными символами с двух сторон. |
| **%%(%%** | Перейти на первую точку слева от курсора (если она есть, в противном случае на начало абзаца). |
| **%%)%%** | Перейти на первую точку справа от курсора (если она есть, в противном случае на конец абзаца). |
| **%%{%%** | Перейти на абзац назад до пустой строки. |
| **%%}%%** | Перейти на абзац вперёд до пустой строки. |
^ Перемещение по программному коду ^^
| **%%%%%** | Перемещение между открытием / закрытием парных скобками: **%%(),[]%%** или **%%{}%%**. |
| **%%[[%%** | Перейти к предыдущей функции. |
| **%%]]%%** | Перейти к следующей функции. |
| **%%[{%%** | Перейти к началу текущего блока кода. |
| **%%]}%%** | Перейти в конец текущего блока кода. |
^ Поиск ^^
| **%%/%%** | Поиск. |
| **%%?%%** | Поиск в обратном направлении. |
| **%%n%%** | Перейти к следующему совпадению. |
| **%%N%%** | Повторить поиск назад. |
| **%%*%%** | Перейти к следующему вхождению слова под курсором. |
| **%%#%%** | Перейти к предыдущему вхождению слова под курсором. |
^ Повторения ^^
| **%%.%%** | Повторить последнюю команду. |
| **%%23dd%%** | Удалить (вырезать) 23 строки. |
| **%%5j%%** | Перейти на 5 строк вверх. |
| **%%qa%%** | Начать запись комбинации клавиш, которая будет назначена за клавишей 'a'. |
| **%%q%%** | Закончить запись. |
| **%%@a%%** | Выполнить макрос записанный под именем 'a'. |
| **%%4@a%%** | Выполнить макрос записанный под именем 'a' 4 раза. |
^ Замена текста ^^
| **%%:%s/search/replace/g%%** | Заменить все вхождения 'search' на 'replace. |
| **%%:%s/old/new/gw%%** | Заменить все вхождения “old” на “new” с запросом подтверждения. |
| **%%:5,10s/search/replace/g%%** | Заменить все вхождения 'search' на 'replace' с 5 по 10 строку. |
| **%%:5,$s/search/replace/g%%** | Заменить все вхождения 'search' на 'replace' начиная с 5 строки и до конца файла. |
| **%%:%s/\(\d\+\)-\(\d\+\)\+/\1\–\2/g%%** | Find all [number]-[number] text and replace with [number]–[number] |
| **%%:%s/\v(\d+)-(\d+)+/\1\–\2/g%%** | Same as last, but using magic regex. |
| **%%:g/foo/ s/bar/BAR/g%%** | On lines that match the regex /foo/, replace 'bar' with 'BAR'. |
| **%%:vimgrep /^** | Find lines that start with '%%:%s/^/hello/g%%
** | Добавить “hello” в начало каждой строки. |
| **%%:%s/$/Harry/g%%** | Добавить “Harry” в конец каждой строки. |
| **%%:%s/onward/forward/gi%%** | Заменить “onward” на “forward” с учетом регистра. |
| **%%:%s/ *$//g%%** | Убрать все пробелы. |
| **%%:g/string/d%%** | Удалить все строки, содержащие “string”. |
| **%%:v/string/d%%** | Удалить все строки, не содержащие “string”. |
| **%%:s/Bill/Steve/%%** | Заменить первое вхождение “Bill” на “Steve” в текущей строке. |
| **%%:s/Bill/Steve/g%%** | Заменить все вхождения “Bill” на “Steve” в текущей строке. |
| **%%:%s/\r//g%%** | Убрать символ возврата каретки (Такие тексты обычно приходят от windows-пользователей). |
| **%%:%s#>[^<]\+>##g%%** | Очистить текст от HTML-тегов. |
| **%%:%s/^\(.*\)\n\1$/\1/%%** | Удалить строки, повторяющиеся дважды. |
| **%%Ctrl+a%%** | Увеличить число под курсором на единицу. |
| **%%Ctrl+x%%** | Уменьшить число под курсором на единицу. |
| **%%ggVGg?%%** | Преобразовать текст в Rot13. |
| **%%:cn%%** | Move to next entry in the quickfix list. |
| **%%:cp%%** | Move to previous entry in the quickfix list. |
^ Вставка ^^
| **%%i%%** | Перейти в режим вставки в текущем положении курсора. |
| **%%I%%** | Переместить курсор в начало строки и перейти в режим вставки. |
| **%%a%%** | Переместить курсор вправо на один символ и включить режим вставки. |
| **%%A%%** | Переместить курсор в конец строки и включить режим вставки. |
| **%%o%%** | Добавить пустую строку после текущей. |
| **%%O%%** | Добавить строку перед текущей. |
^ Удаление текста ^^
| **%%x%%** | Удалить (вырезать) символ после курсора. |
| **%%dw%%** | Удалить (вырезать) текущее слово. |
| **%%dd%%** | Удалить (вырезать) текущую строку. |
| **%%d^%%** | Удалить все символы от текущей позиции до начала строки |
| **%%D%%** | Удалить (вырезать) начиная с положения курсора и до конца строки. |
| **%%d$%%** | ::: |
| **%%dt [char]%%** | Удалить (вырезать) начиная с положения курсора и до первого вхождения символа **[char]**. |
| **%%df[char]%%** | ::: |
| **%%d)%%** | Удалить (вырезать) начиная с положения курсора и до конца предложения. |
| **%%d}%%** | Удалить (вырезать) начиная с положения курсора и до конца адзаца. |
| **%%di(%%** | Удалить (вырезать) текст внутри скобок. |
| **%%da<%%** | Удалить (вырезать) скобки **<>** вокруг. |
| **%%dit%%** | Удалить (вырезать) текст между открывающим и закрывающим тегами. |
Не завершено!
----
===== Источники =====
* [[http://bencrowder.net/files/vim-fu/|Basic Vim Tips]]