Vim (Русский) - ArchWiki

# Vim (Русский)

Vim является расширенной версией Vi с дополнительными функциями, которые помогают редактировать исходных код. Некоторые улучшения Vim включают в себя: сравнение файлов(vimdiff), подсветка синтаксиса, комплексная система помощи, встроенная поддержка скриптов(vimscript) и визуальный режим для простоты выделения. Vim фокусируется на использовании клавиатуры, это не простой редактор как nano или pico. Он занимает время для изучения и целую жизнь для освоения.

## Установка

Пакеты с интерфейсом командной строки:

- vim-minimal - облегченная версия.
- vim - версия с поддержкой интерпретаторов Python 2, Lua и Ruby, но без графической оболочки.
- vim-python3 - тоже самое что и `vim`, но уже с поддержкой интерпретатора Python 3.

Пакеты с графическим интерфейсом:

- gvim - идентичен `vim`, но имеет интерфейс GTK+.
- gvim-python3 - идентичен `gvim`, но имеет поддержку интерпретатора Python 3.

Обратите внимание: Неофициальный репозиторий herecura-stable также предоставляет несколько версий Vim/gVim: `vim-cli` `vim-gvim-common` `vim-gvim-gtk` `vim-gvim-qt` `vim-rt vim-tiny`

## Использование

Это основной обзор о том, как использовать Vim. Также, вы можете запустить `vimtutor`/`gvimtutor` для получения справки встроенной в Vim.

Vim имеет четыре различных режима:

- Командный режим (Command mode): нажатия клавиш интерпретируются как команды.
- Режим вставки (Insert mode): нажатия клавиш вводятся в файл.
- Визуальный режим (Visual mode): нажатия клавиш выделяют, вырезают или копируют текст.
- Режим редактора Ex (Ex mode): режим ввода команд редактора Ex(например, сохранение файла, замена текста и т.д.).

### Основы редактирования

Если вы запустите Vim с помощью:

    $ vim somefile

то вы увидите пустой документ (при условии что somefile не существует. Но если он существует, вы увидите его содержимое). Вы будете не в состоянии редактировать файл - вы в Командном режиме. В этом режиме вы отдаете команды Vim с помощью клавиатуры.

Обратите внимание: Vim является примером классической философии Unix. Он имеет сложную систему обучения, но как только вы запустите его, вы увидите, что он является чрезвычайно мощным. Также, все команды чувствительны к регистру. Иногда команды в верхнем регистре “тупые“ (`s` заменяет символ, в то время как `S` заменяет строку), в других случаях это совершенно разные команды (`j` перемещает вниз, в то время как `J` соединяет две строки).

Вы пишете текст (он вставляется перед курсором) с помощью команды `i`. `I` (i в верхнем регистре) вставляет текст в начало строки. Чтобы добавить текст после курсора используют `a`. `A` тоже самое только курсор перемещается к концу строки. И вы вернетесь в командный режим в любое время, нажав клавишу `Esc`.

### Перемещение

В Vim, вы можете перемещать курсор с помощью клавиш со стрелками, но это не путь Vim (Vim way). Вам придется перемещать вашу правую руку полностью от стандартного положения набора текста полностью к клавишам со стрелками, а затем обратно. Не весело.

В Vim, вы можете переместиться вниз нажав `j`. Вы можете помнить об этом, потому что “j“ опущена вниз. Вы перемещаете курсор назад нажимая `k`. Влево `h` (слева от “j“} и вправо это `l` (L в нижнем регистре).

`^` переместит курсор в начало строки, а `$` переместит его в конец.

Обратите внимание: `^` и `$` обычно используют в регулярных выражениях для соответствия начала и конца строки. Регулярные выражения очень мощны и обычно используются в *nix системах, может быть они немного сложны сейчас, но позже у вас появится “идея“ о том как использовать большинство из них

`w` переместит курсор через слово. `W` будет включать в себя несколько больше символов в то, что Vim считает словом (например, знак подчеркивания и тире). `b` перемещает курсор назад на слово, `B` будет включать в себя несколько больше символов в то, что Vim считает словом. Чтобы переместиться в конец слова, используйте `e`, `E` включает в себя больше символов.

`(` переместит курсор в начало предложения. `)` делает обратное, перемещает в конец предложения. `{` переместит курсор в начало абзаца. `}` делает обратное, перемещает в конец абзаца.

`H` переместит курсор в вверх экрана, `M` в центр, `L` вниз. `gg` переместит курсор в начало файла, `G` в конец.

### Повтор команд

Если перед командой стоит число, то эта команда будет выполняться столько раз, сколько ввел пользователь (есть исключения, но они имеют смысл, например команда `s`). Например, печатая `3i` затем “Help!“, эта команда выведет “Help!Help!Help!“. Печатая `2}` вы перенесетесь на два абзаца вперед. Это очень удобно со следующими командами...

### Удаление

Команда `x` удаляет символ под курсором. `X` удалит символ перед курсором. Это именно те команды с которыми можно повеселиться. `6x` удалит 6 символов. Нажав `.` (точка) вы повторите предыдущую команду. Итак, к примеру у вас есть слово “foobar“ в нескольких местах, но потом вы ходите сделать из него слово “foo“. Поместите курсор под “b“, введите `3x`, переместитесь к следующему “foobar“ и нажмите `.` (точка).

Команда `d` говорит Vim, что вы хотите удалить что - то. После ввода `d` надо сказать Vim, что вы именно хотите удалить. Здесь вы можете использовать команды перемещения. `dW` удалит все до следующего слова. `d^` удалит все до начала линии. Также, команды будут работать если перед ними будет число: `3dW` удалит три слова, `D` (верхний регистр) это команда для удаления всего до конца линии (в основном используется `d$`). `dd` удалит всю линию.

### Отмена и повтор

Vim имеет встроенный буфер обмена. Действия могут быть отменены при помощи `u` и возвращены с помощью `ctrl + r`.

### Визуальный режим

Нажав `v` вы перейдете в визуальный режим. Здесь вы передвигаете курсор чтобы выделять текст, когда вы закончили, нажмите `y` чтобы скопировать текст в буфер, иначе используйте `c` чтобы вырезать его. `p` вставляет вырезанное после курсора, `P` перед курсором. Введите `V` для режима визуальной строки, выделение по линиям. Введите `ctrl + v` для визуального блока, выделение по блокам.

Обратите внимание: Когда вы удаляете что - нибудь, это что - то помещается внутри буфера и доступно для вставки.

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

Для поиска буквы или слова в файле, обычно используют `/` и тогда вы вводите символы которые требуются искать и нажимаете enter. Чтобы посмотреть следующее соответствие нажимайте `n`, `N` для предыдущего соответствия.

Для поиска и замены используйте команду замены `:s/`. Синтаксис: `[диапазон]s///[аргументы]`. Например:

    Команда         Результат
    :s/xxx/yyy/     Замена xxx на yyy в первом случае
    :s/xxx/yyy/g    Замена xxx на yyy в каждом случае на каждой линии
    :s/xxx/yyy/gc   Замена xxx на yyy глобально с подтверждением
    :%s/xxx/yyy/g   Замена xxx на yyy глобально по всему файлу
    :#,#s/xxx/yyy/g Замена xxx на yyy в диапазоне строк

Вы можете использовать глобальную команду `:g/` для поиска шаблонов, а затем выполнения команды для каждого совпадения. Синтаксис: `[диапазон]:g//[команда]`.

    Команда  Результат
    :g/^#/d  Удаление всех линий, которые начинаются с #
    :g/^$/d  Удаление всех пустых линий

### Сохранение и выход

Для сохранения и/или выхода, вам понадобится режим Ex. Командам режима Ex предшествует `:`. Чтобы записать файл используйте `:w` или если у файла нет имени, используйте `w filename`. Выйти можно при помощи `:q`. Если вы не хотите сохранять изменения, используйте `:q!`. Для того чтобы сохранить изменения и выйти, используйте `:x`.

### Дополнительные команды

1. `dd` удалит текущую строку (используйте `ddp` для быстрой смены строки)
2. `cc` удалит текущую строку и переведет вас в режим замены
3. `o` создаст новую строку ниже текущей и переведет вас в режим замены, `O` создаст новую строку выше текущей и переведет вас в режим замены
4. `yy` скопирует всю строку в буфер
5. `*` подсветит текущее слово и `n` используется для его поиска

## Настройка

Конфигурационный файл Vim лежит в домашней директории: `~/.vimrc`, и файлы расположены внутри `~/.vim/`. Глобальный файл конфигурации расположен в `/etc/vimrc`. Глобальные файлы расположены внутри `/usr/share/vim`.

Глобальный файл конфигурации Vim в Arch Linux очень прост, но он отличен от файла конфигурации Vim других дистрибутивов. Чтобы получить ожидаемые улучшения (такие как подсветка синтаксиса, возвращение курсора в последнюю запомненную позицию), рассмотрим их, используя пример конфигурационного файла Vim:

    # mv /etc/vimrc /etc/vimrc.bak
    # cp /usr/share/vim/vim74/vimrc_example.vim /etc/vimrc

### Циклический поиск

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

    set wrapscan

### Подсветка синтаксиса

Чтобы включить подсветку синтаксиса (Vim поддерживать огромный список языков программирования):

    :filetype plugin on
    :syntax on

### Использование мышки

Vim позволяет пользоваться мышкой, но только в тех терминалах, которые это поддерживают.

Чтобы включить эту особенность, добавьте линию в `~/.vimrc`:

    set mouse=a

Обратите внимание:

- Это работает даже в PuTTY через SSH.
- В PuTTY, нормальная подсветка/копирование изменены, потому что Vim входит в визуальный режим когда используется мышь. Чтобы нормально выделять текст мышкой, удерживайте `Shift` пока выделяете текст.

### Переход на новую строку с помощью клавиш со стрелками

По умолчанию, нажимая `←` в начале линии или нажимая `→` в конце линии, курсору не позволят перейти на прошлую или следующую строку.

Это может быть изменено с помощью добавления строки `set whichwrap=b,s,<,>,[,]` в ваш файл `~/.vimrc`.

### Пример ~/.vimrc

Пример конфигурации Vim.

## Объединение файлов

Vim включает в себя редактор diff (программа, которая помогает объединять различия между двумя [или более] файлов). `vimdiff` открывает вертикальный, с несколькими панелями, вид, что и подчеркивает различия между файлами. Команда для запуска: `vimdiff файл1 файл2`. Вот список команд `vimdiff`. Для основ `Vim` редактирования, прочитайте туториал.

Действие | Горячая клавиша
--- | ---
следующие изменение | `]c`
предыдущее изменение | `[c`
применение разницы | `do`
вставка разницы | `dp`
развернуть fold | `zo`
свернуть fold | `zc`
пересканировать файлы | `:diffupdate`
переключить окна | `Ctrl+w+w`

## Хитрости

Решение определенных задач пользователя.

### Нумерация строк

1. `:set number` нумерация строк.
2. `:set relativenumber` относительная нумерация строк.
3. `:<номер строки>` чтобы перепрыгнуть на определенную строку.

### Проверка орфографии

Проверку орфографии в Vim можно включить с помощью:

    set spell

По умолчанию установлен только английский словарь. Больше можно найти в официальных репозиториях, используя `vim-spell` для поиска. Дополнительные словари могут быть найдены в FTP архиве Vim. `~/.vim/spell/` папка для словарей. Включить специфичный словарь можно с помощью `:setlocal spell spelllang=LL`.

Действие | Команда
--- | ---
следующая ошибка | `]s`
предыдущая ошибка | `[s`
орфографические предложения | `z=`
добавить правильное написание | `zg`
добавить правильное написание на сессию | `zG`
добавить не правильное написание | `zw`
добавить не правильное написание на сессию | `zW`
повторить проверку орфографии во всем файле | `:spellr`

Совет:

- Чтобы включить проверку сразу двух языков (например Английский и Русский), добавьте `set spelllang=en,ru` в ваш `~/.vimrc` или `/etc/vimrc` файл. И потом перезапустите Vim.
- Вы можете включить проверку орфографии для произвольных файлов (например *.txt) используя плагин FileType и собственное правило для определения типа файлов. Чтобы включить проверку орфографии для всех файлов оканчивающихся на `*.txt`, создайте файл `/usr/share/vim/vimfiles/ftdetect/plaintext.vim` и вставьте эту строку туда `autocmd BufRead,BufNewFile *.txtsetfiletype plaintext`. Далее, вставьте строку `autocmd FileType plaintext setlocal spell spelllang=ru_ru` в ваш `~/.vimrc` или `/etc/vimrc` файл и перезапустите Vim.
- Чтобы включить проверку орфографии только для файлов LaTeX (или TeX), добавьте `autocmd FileType tex setlocal spell spelllang=ru_ru` в ваш `~/.vimrc` или `/etc/vimrc` файл и перезапустите Vim. Для проверки орфографии в языках отличных от Русского, просто замените `ru_ru` на значение соответствующему вашему языку.

### Сохранение позиции курсора

Если вы хотите чтобы курсор возвращался в прежнее положение после открытия файла, добавьте следующее в `~/.vimrc`:

    augroup resCur
      autocmd!
      autocmd BufReadPost * call setpos(".", getpos("'\""))
    augroup END

### Замена команд Vi на Vim

Создайте псевдоним для `vi` на `vim`.

### Возврат каретки DOS/Windows

Если есть `^M` в конце каждой линии, то это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. В Linux это называется символом новой строки в Windows, они называются возвратом каретки.

Для замены окончаний строк Windows (принимайте во внимание, что `^` является буквой), нажмите `Ctrl+V,Ctrl+M` чтобы получить правый символ управления:

    :%s/^M//g

В качестве альтернативы установите пакет dos2unix и запустите `dos2unix файл`.

### Пустое пространство в нижней части gVim окон

Когда используется Window manager (Русский) настроенный на игнорирование размеров окна, gVim будет заполнять нефункциональные области с помощью стандартного фонового цвета темы GTK.

Решение заключается в регулировании количества места которое будет резервировать в нижней части окна gVim. Поместите следующую строку в `~/.vimrc`:

    set guiheadroom=0

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

## Плагины

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

### Менеджеры плагинов

Кросс-платформенным методом установки и управлением плагинами Vim через менеджер плагинов. Менеджер плагинов - это плагин который выполняет роль пакетного менеджера плагинов Vim.

- Vundle в настоящее время наиболее популярный менеджер плагинов Vim
- pathogen.vim простой плагин для редактирования runtimepath Vim'а.

### Pacman

Группа vim-plugins включает в себя много плагинов:

    pacman -Ss vim-plugins

#### cscope

Cscope является инструментом для просмотра проекта. Путем перехода к слову/символу/функции и вызову cscope (обычно с помощью горячих клавиш) можно найти: функции вызывают функцию. объявление функции и многое другое. Требуется несколько шагов, чтобы начать поиск по кодовой базе:

Установите пакет cscope.

Скопируйте стандартный файл cscope, который vim будет автоматически читать:

    mkdir -p ~/.vim/plugin
    wget -P ~/.vim/plugin http://cscope.sourceforge.net/cscope_maps.vim

Обратите внимание: Вам наверное понадобится откомментировать следующие строки в `~/.vim/plugin/cscope_maps.vim` чтобы включить горячие клавиши cscope в Vim 7.x:

    set timeoutlen=4000
    set ttimeout

Создать файл, который содержит файлы, которые вы хотите чтобы cscope индексировал (Cscope может обрабатывать множество языков, но для примера мы возьмем только .c, .cpp и .h файлы):

    cd /путь/к/папкепроекта/
    find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files

Создание базы данных файлов, которые cscope будет читать:

    cscope -bq

Обратите внимание: Вы должны просматривать файлы вашего проекта из этой же локации или установить или экспортировать переменную $CSCOPE_DB, указав там cscope.out файл.

Горячие клавиши по умолчанию:

     Ctrl-\ и
          c: найти функции вызывающие эту функцию
          d: найти функции вызываемые этой функцией
          e: найти egrep паттерн
          f: найти этот файл
          g: найти это определение
          i: найти файлы #включающие этот файл
          s: найти этот символ C
          t: найти присвоение к

Не стесняйтесь изменять горячие клавиши.

    #ctrl-c используется чтобы найти функции вызывающую функцию
    nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>

#### Taglist

Taglist содержит обзор структуры файлов исходного кода и позволяет эффективно просматривать файлы исходного кода на различных языках программирования.

Установите пакет vim-taglist.

Полезные опции можно записать в `~/.vimrc`:

    let Tlist_Compact_Format = 1
    let Tlist_GainFocus_On_ToggleOpen = 1
    let Tlist_Close_On_Select = 1
    nnoremap <C-l> :TlistToggle<CR>

#### AfterColors

Пакет vim-plugin-aftercolors активирует директорию (локальную и системную) `vim/after/colors`, что позволяет настройкам colorschemes быть перезаписанными.

Стандартная локальная директория `~/.vim/after/colors` является директорией по умолчанию, которая желательно должна быть быть создана.

Перед изменением настроек полезно прочитать colorscheme файл, иногда авторы оставляют заметки и текущие настройки могут быть пересмотрены. Чтобы перезаписать текущие настройки, создайте файл с именем который соответствует имени файла colorscheme (например, `~/.vim/after/colors/desert.vim`) и введите альтернативные настройки. Для примера:

    ~/.vim/after/colors/desert.vim

    highlight CursorLine ctermbg=232

Если другой экземпляр Vim работает, то для перезагрузки перезаписанных настроек colorscheme:

    colorscheme desert

Изменения могут также быть испытаны перед переопределением, они сохранятся непосредственно с Vim. Например, чтобы вывести список всех colorscheme:

    :highlight

Чтобы увидеть определенные настройки (совет: включите wildmenu чтобы увидеть tab-competitions):

    :highlight CursorLine

Чтобы временно изменить настройку:

    highlight CursorLine ctermbg=234

Чтобы узнать какой цвет использовать, число цветов поддерживаемое в терминале должно быть узнано. Вот пару ссылок со сценариями и описаниями: ссылка1, ссылка2, ссылка3.

## Ресурсы

### Официальные

- Домашняя страница
- Документация
- Tips Wiki

### Руководства

- vim Tutorial and Primer
- vi Tutorial and Reference Guide
- Graphical vi-Vim Cheat Sheet and Tutorial
- Vim Introduction and Tutorial
- Open Vim - Коллекция средств обучения Vim.
- Learn Vim Progressively
- Learning Vim in 2014

#### Видео

- Vimcasts - Скринкаст в формате .ogg.
- Vim Tutorial Videos - От основ к продвинутым темам.

#### Игры

- Vim Adventures
- VimGolf

### Примеры конфигурации

- nion
- Детальная конфигурация от Amir Salihefendic
- Bart Trojanowski
- Дистрибьютор Vim Steve Francia
- Конфигурация Vim W4RH4W
- vimrc/colorscheme от askapache

### Другие

- HOWTO Vim - статья Gentoo Wiki на которой базировалась эта статья (автор не известен).
- Vivify - Редактор Color.Scheme для Vim.
- Usevim - Часто обновляемый блог о плагинах, хитростях и т.д.
- Vim Awesome - Сайт, который сортирует плагины Vim по популярности среди пользователей GitHub.
- Basic Vim Tips - Справочная таблица Vim, в первую очередь ориентированная на начинающих.

Categories:

- Development (Русский)
- Text editors (Русский)
- Русский