Jump to content

# Vim (Русский)

6 languages

- Deutsch
- English
- Español
- 日本語
- Português
- 中文（简体）

From ArchWiki

Ссылки по теме

- List of applications/Documents#Vi-style text editors

Состояние перевода: На этой странице представлен перевод статьи Vim. Дата последней синхронизации: 29 июня 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Vim - консольный текстовый редактор, являющийся расширенной версией vi с дополнительными функциями, которые включают в себя: подсветку синтаксиса, полноценную систему помощи, встроенную поддержку скриптов (vimscript), визуальный режим для простоты выделения и сравнение файлов (vimdiff).

## Установка

Установите один из следующих пакетов:

- vim — с поддержкой Python 2/3, Lua, Ruby и Perl, но без поддержки GTK/X.
- gvim — идентичен `vim`, но c поддержкой GTK/X.

Примечание:

- Пакет `vim` собран без поддержки Xorg; отсутствует компонент `+clipboard`, поэтому Vim не сможет оперировать с основным и обменным буфером. Пакет gvim предоставляет доступ также и к Vim с интерфейсом командной строки, но с поддержкой `+clipboard`
- Неофициальный репозиторий herecura предоставляет несколько версий Vim/gVim: `vim-cli`, `vim-gvim-common`, `vim-gvim-gtk`, `vim-gvim-qt`, `vim-rt` and `vim-tiny`.

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

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

Vim включает в себя широкую справочную систему, доступ к которой можно получить посредством `:h субъект`. Субъекты включают в себя команды, опции, горячие клавиши, плагины и так далее. Используйте команду `:h` (без какого-либо субъекта), чтобы полчуить информацию о вспомогательной системе и о том, как перемещаться между субъектами.

## Настройка

Файл конфигурации Vim для конкретного пользователя расположен в домашней директории - `~/.vimrc`, файлы текущего пользователя в `~/.vim/`. Общий файл конфигурации - `~/.vimrc`, а общие файлы находятся в `/usr/share/vim/`.

Примечание: Более ли менее стандартное поведение - например, подсветка синтаксиса - определяется в `defaults.vim`, который загружается, когда отсутствует `~/.vimrc`. Добавьте `let skip_defaults_vim=1` в `/etc/vimrc` для полного отключения загрузки `defaults.vim`. [1]

### Буфер обмена

Такие команды Vim как `:yank` или `:paste` работают с безымянным регистром, который по умолчанию соответствует регистру `"*`. Если доступна `+clipboard`, то регистр `"*` отображается в `PRIMARY` буфер в X.

Чтобы изменить стандартный регистр на `"+`, используйте `:set clipboard=unnamedplus`. Регистр `"+` соответствует `CLIPBOARD` буферу в X.

Для более подробной информации смотрите `:help 'clipboard'`.

Совет: Для копирования и вставки могут быть созданы горячие клавиши. Смотрите, например, [2] для `ctrl+c`, `ctrl+v` и `ctrl+x`.

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

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

    :filetype plugin on
    :syntax on

### Отступы

Отступы для определенного типа файла:

    :типфайла indent on

### Визуальный перенос

Опция `wrap` (включена по умолчанию) указывает Vim переносить длинные строки, которые не помещаются на экран, так, что оставшаяся часть строки отображается на следующей линии. Опция `wrap` влияет только на отображение текста, сам текст при этом не изменяется.

Изначально перенос строки происходит ровно в том месте, где размещается последний ее символ, поместившийся на экране, даже если он находится в середине слова. Для более умного переноса используйте опцию `linebreak`. Когда эта опция включена командой `set linebreak`, перенос строки происходит только после символов, которые перечислены в опции `breakat`, которая по умолчанию содержит в себе пробел и некоторые знаки препинания (смотрите `:help breakat`).

Остаток строки обычно начинается с начала следующей линии, без всякого отступа. Опция breakindent сообщает Vim, что необходимо отображать перенесенный остаток строки с отступом, так, что на всех последующих линиях перенесенные части строки имеют тот же отступ, что и начало этой строки. Поведение `breakindent` может быть настроено при помощи опции `breakindentopt`. Например, для файлов исходного кода на языке Python может быть полезно добавлять дополнительный отступ в 4 пробела для перенесенных частей длинной строки (подробнее смотрите в `:help breakindentopt`):

    autocmd FileType python set breakindentopt=shift:4

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

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

- xterm/urxvt
- Консоль linux с gpm (смотрите подробнее на странице Console mouse support)
- PuTTY

Чтобы включить поддержку мыши, добавьте в `~/.vimrc`:

    set mouse=a

Опция `mouse=a` устанавливается в `defaults.vim`

Примечание: Копирование/вставка будут использовать регистр `"*`, если есть доступ к X серверу; смотрите раздел #Буфер обмена. xterm по-прежнему может обрабатывать нажатия мыши, когда зажат `shift`.

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

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

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

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

Vim включает в себя diff-редактор (программа, которая отображает различия между двумя файлами и позволяет удобно их объединять). Используйте vimdiff для этого — просто укажите ей пару файлов: `vimdiff файл1 файл2`. Ниже приведен список команд vimdiff.

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

## Советы и рекомендации

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

Чтобы включить отображение номера столбца, используйте `:set number`. По умолчанию показываются абсолютные значения номеров строк, относительные включаются посредством `:set relativenumber`.

Переход к новой строке осуществляется посредством `:line number` или `line numbergg`. Все переходы запоминаются в лист переходов, для более подробной информации смотрите `:h jump-motions`.

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

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

    set spell

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

Действие | Команда
--- | ---
следующая ошибка | `]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 *.txt setfiletype plaintext`. Далее, вставьте строку `autocmd FileType plaintext setlocal spell spelllang=ru` в файл `~/.vimrc` или `/etc/vimrc` и перезапустите Vim. Или поместите строку `autocmd BufRead,BufNewFile *.txt setlocal spell` в `~/.vimrc` или `/etc/vimrc` и перезапустите Vim. Не забудьте отредактировать строчку (specifically `*.txt`), чтобы включить соответствующие типы файлов для проверки орфографии.
- Чтобы включить проверку орфографии только для документов LaTeX (или TeX), добавьте `autocmd FileType tex setlocal spell spelllang=ru` в файл `~/.vimrc` или `/etc/vimrc` и перезапустите Vim.

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

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

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

### Запуск Vim по команде vi

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

Если вы хотите, чтобы при вводе `sudo vi` запускался `vim`, то установите пакет vi-vim-symlinkAUR, который удалит `vi` и заменить его символической ссылкой на `vim`.

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

Если вы видите последовательность `^M` в конце каждой линии, это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. Дело в том, что в Linux для переноса принято использовать один символ новой строки (LR), тогда как в системах Windows/MS DOS для той же цели используется последовательность из двух символов: возврата каретки (CR) и новой строки (LR). Как раз эти символы возврата каретки и отображаются в виде `^M`.

Для удаления всех символов возврата каретки из файла, выполните:

    :%s/^M//g

Обратите внимание, что `^` здесь — управляющий символ, а не обычный. Чтобы ввести управляющую последовательность `^M`, нажмите `Ctrl+v,Ctrl+m`.

Также вы можете просто установить пакет dos2unix и исправлять файлы командой `dos2unix файл`.

Примечание: Другой простой способ заключается в изменении опции `fileformat`. Используйте `set ff=unix` для преобразования файлов с окончанием строки DOS/Windows в файлы с окончанием строки Unix. Для того, чтобы сделать обратное, просто используйте `set ff=dos`.

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

Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.

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

    set guiheadroom=0

Примечание: Установив значение 0, вы не сможете видеть горизонтальную полосу прокрутки внизу окна.

## Плагины

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

Совет: For a list of popular plugins, see Vim Awesome)

### Установка

#### Используя встроенную систему управления пакетами

В Vim 8 добавлена возможность загрузки сторонних плагинов. Чтобы использовать эту функциональность, переместите плагины в `~/.vim/pack/foo`.

#### Используя менеджер плагинов

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

- Vundle — в настоящее время наиболее популярный менеджер плагинов Vim.
- Vim-plug - минималистичный менеджер плагинов для Vim, который имеет много особенностей, например, загрузка плагинов по запросу и параллельное обновление.
- pathogen.vim — простой плагин для управления переменной runtimepath.
- Dein.vim - менеджер плагинов, заменяющий NeoBundle, доступен как vim-dein-gitAUR.

#### Из репозиториев Arch

Группа vim-plugins объединяет множество разнообразных плагинов. Используйте команду `pacman -Sg vim-plugins` для отображения списка пакетов, которые вы можете затем установить, используя pacman.

### cscope

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

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

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

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

Примечание: Вам наверное понадобится откомментировать следующие строки в `~/.vim/plugin/cscope_maps.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 ищет файл `cscope.out` в рабочем каталоге, поэтому тот же каталог следует использовать и для навигации по проекту в Vim. Также, вы можете указать путь до этого файла явно, установив его в переменной окружения `$CSCOPE_DB`.

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

     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>

### Taglist

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

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

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

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

## Смотрите также

### Официальные ресурсы

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

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

- vim Tutorial and Primer
- vi Tutorial and Reference Guide
- Graphical vi-Vim Cheat Sheet and Tutorial
- Vim Introduction and Tutorial[устаревшая ссылка 2020-08-06 ⓘ]
- Open Vim - Коллекция средств обучения Vim.
- Learn Vim Progressively
- Learning Vim in 2014
- Seven habits of effective text editing
- Basic Vim Tips

#### Видео

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

#### Игры

- Vim Adventures
- VimGolf

### Конфигурация

- nion
- Детальная конфигурация от Amir Salihefendic[устаревшая ссылка 2020-08-06 ⓘ]
- Bart Trojanowski
- Steve Francia's Vim Distribution
- Vim Awesome - Vim Plugins
- Конфигурация Vim W4RH4W
- Fast vimrc/colorscheme from askapache
- Базовый vimrc
- Usevim

#### Цвета

- Vivify
- Vim colorscheme customization

Categories:

- Text editors (Русский)
- Console applications (Русский)

Hidden category:

- Pages with dead links