Advertisement
  1. Computer Skills
  2. Terminal

Основы конфигурации Vim

Scroll to top
Read Time: 6 min

Russian (Pусский) translation by Anton L (you can also view the original English article)

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

Файл .vimrc

Вся информация о настройках Vim располагается в файле .vimrc, находящийся у вас в домашней директории. Вы можете открыть его в Vim, при помощи команды для редактирования файлов.

1
:e ~/.vimrc

Этот файл пустой, так как он ещё не был использован. Данный туториал покажет вам, как им пользоваться.

Комментарии

До того как вы добавите какой-либо код, вы должны указать, что он делает. Возможно вы знаете, что делаете в данный момент, но ситуация изменится спустя месяц. Всегда комментируйте код, таким образом, когда вы вернетесь к нему, перед вашими глазами всегда будет напоминание за что он отвечает.

Для файла .vimrc, всё, что находится после двойных кавычек, до конца строки, не используется. Следовательно, вы можете писать таким образом для себя пометки, чтобы вспомнить, что вы делали.

1
set number  "This turns on line numbering

Теперь вы будите всегда знать, что команда set number включает нумерацию строк.

Опции и Переменные

Включить нумерацию строк и сделать её относительной, можно добавив в файл .vimrc:

1
set number          "This turns on line numbering

2
set relativenumber  "This turns on relative numbering

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

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

1
set nonumber            "This turns off line numbering

2
set norelativenumber    "This turns off relative numbering

Не ставьте оба set'а, которые мы рассматривали в .vimrc. Это включит опцию и тут же её выключит. Скоро, я покажу вам, как делать это более программным путем.

Если вам известно текущее состояние опции, переключение опции, может быть альтернативным вариантом установки необходимой опции. Переключить её можно посредством ! после названия опции. Это включит/выключит опцию:

1
set number!             "This toggles the value of number

2
set relativienumber!    "This toggles relative line numbers

Если же хочется узнать текущее значение опции, используйте ? после названия опции, например

1
set number?

Это вернёт нам number. Теперь, с этой информацией, вы всегда сможете узнать состоянии интересующей вас опции.

Если вы хотите изменить количество колонок, которое занимает нумерация на экране, вы можете присвоить значение опции numberwidth. Данный пример установит нумерацию в 4 колонки шириной:

1
set numberwidth=4       "Set the line numbers to 4 spaces

Посмотрите сколько места подойдет вам для нумерации и добавьте данную опцию в ваш .vimrc.

Если вам понадобится создать переменную, используйте выражение let. К примеру:

1
let name = "Richard Guay"   "Set my name in to the name variable

Когда сохраните это в файле .vimrc (используйте свое имя в качестве значения переменной), можно отобразить его в режиме командной стоки с помощью :echo name

Показывает значение переменной

Поставив перед опцией префикс &, с ней можно обращаться, как с переменной. Показать значение опции можно таким образом:

1
:echo &numberwidth

Команда echo используется исключительно для переменных, но указав префикс & перед опцией, тем самым мы сообщаем Vim, что хотим взаимодействовать с данной опцией, как с переменной. Теперь, удобно производить над значением опции различные математические операции. Следовательно, чтобы увеличить ширину нумерации на одну колонку, можно воспользоваться следующим примером:

1
:let &numberwidth = &numberwidth + 1

echo &numberwidth должно показать значение 5.

Все переменные имеют свою область видимости. Чтобы определить область видимости, нам нужно указать букву, :, и имя переменной. Неопределенная область видимости считается глобальной. Перечислим области видимости:

b: Область видимости буфера—Переменная будет доступна только в текущем буфере
w: Область видимости окна—Доступна только внутри текущего окна
t: Область видимости вкладки—Доступна на текущей вкладке
g: Глобальная область видимости - Доступна везде
I: Локальная область видимости—Переменная доступна локально, для функции в которой была определена
s: Область видимости скрипта—Переменная является локальной, только для текущего скрипта
a: Область видимости аргумента—Переменная будет доступна только внутри функции
v: Глобальная область видимости—Используется для переменных определённых и используемых Vim

Правильное определение переменной в глобальной области видимости, будет выглядеть так:

1
let g:name = "Richard Guay" "Set my name in to the name variable

Получаем информацию

Теперь когда вы знаете, как установить опции и определить переменные, вы, возможно, задаётесь вопросом: «Как найти различные опции?». Поискать в сети, одна из возможностей, но вся нужная информация находится в самом Vim. Напишите:

1
:set all

И Vim покажет все доступные опции в программе. Напечатав :let и нажав enter, покажет все переменные.

Команда :help используется для поиска по обширной документации встроенной в Vim. Чтобы выйти из :help, воспользуйтесь :q. В режиме help, вы не выйдите из программы, однако это переключит редактор в командный режим.

Функции

Функции очень полезны в файле .vimrc. Так как конфигурационные файлы Vim используют полноценный язык программирования, с этого момента, я буду называть его своим настоящим именем: VimScript.

Для определения функции в VimScript, используйте:

1
function <function name>()
2
    <function body>
3
endfunc

Мне нравится обычная нумерация и относительная нумерация, но бывают моменты, когда относительную нумерация не нужна. Каждый раз печатать полную команду :set norelativenumber или даже :set relativenumber!, утомительно. Нам бы пригодилась функция для включения и выключения.

1
function TRelative()
2
    set relativenumber!
3
endfunc

Вызвать функцию можно командой :call.

1
:call TRelative()

Команда function не позволяет вам переписать уже существующую функцию. Если эта функция уже где-то была определена, или вы попробовали перезагрузить файл, Vim покажет ошибку и перестанет обрабатывать файл на этом месте. Команду function! позволяет переписать функцию без ошибок. Это хорошая практика в VimScript, всегда использовать function!.

Чтобы выключить нумерация, можно создать функцию, также есть возможность создать функцию, которая будет делать противоположное. Добавьте это в ваш .vimrc:

1
function! NoNumber()
2
    set nonumber
3
    set norelativenumber
4
endfunc
5
6
function! Numbers()
7
    set number
8
    set relativenumber
9
endfunc

Для передачи параметров функции, вам нужно указать имя переменной внутри скобок. К примеру:

1
function! Hi( name )
2
    echo "Hello" a:name
3
endfunc

При вызове функции вам нужно передать аргумент. Теперь когда вы вызовите функцию с именем, вы получите следующий результат:

1
:call Hi( "Richard" )
2
Hello Richard

Основы настройки клавиш

Одна из самых полезный возможностей файла конфигурации — установить нужные вам действия, при нажатии каких-либо клавиш на клавиатуре. Приведём пример, вы часто переключаете относительную нумерацию строк. Чтобы не печатать :call TRelative каждый раз, использование горячей клавиши будет гораздо быстрее. Для этого нам пригодится команда map

1
map <c-t> :call TRelative()<cr>

С этой строкой в файле .vimrc, если нажать Control-T, относительная нумерация будет включаться и выключаться. Попробуйте теперь сами, установить клавишу для переключения обычной нумерации.

Настроить подобного рода клавиши можно не только для командного режима, но и для всех остальных. Если вы укажите префикс с первой буквой необходимого режима, в вашем распоряжении будет горячая клавиша именно для данного режима. nmap устанавливает клавиши для командного режима. vmap  клавиши для визуального режима. imap для текстового режима.

Теперь когда вы узнали эти команды, забудьте их. Эти команды могут быть опасны. Если вы, снова переопределите клавишу, будет использоваться новая клавиша, которая может создать бесконечный цикл в настройках.

Чтобы предотвратить подобного рода ситуацию, вы должны добавить nore после режима и до map. Следовательно, nmap станет nnoremap, vmap станет vnoremap, и imap станет inoremap. Тем самым вы всегда будите ссылаться на сочетание клавиш, которое стоит по умолчанию. Эти команды гораздо безопаснее использовать в конфигурационном файле.

Заключение

В этом уроке я показал вам основы создания конфигурационного файла в Vim. Я показал как: комментировать код в этом файле, включать/выключать опции и определять переменные, создавать функции и настраивать горячие клавиши. Лучше способ запомнить пройденный материал — использовать полученные знания на практике.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Computer Skills tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.