Всем привет! Поговорим о курсоре.
Полезная штука, показывающая текущую позицию в тексте: именно в этом месте появится символ, если нажать на клавишу. Курсор в Вим удобный, но иногда хотелось бы, чтобы текущая строка и/или текущий столбец (символ в строке) были более заметны. Особенно, если подсветка синтаксиса обильна и текст весь разноцветный: это удобно для выделения глазом синтаксических элементов, но курсор можно и потерять на фоне.
В Вим такие возможности есть (начиная с версии 7). Флаг cursorline подсвечивает всю текущую строку (:set cursorline). Убрать, как и любой флаг, позволяет :set nocursorline. Цвет подсветки определяется группой CursorLine. Ее можно настроить, см. заметку про подсветку синтаксиса. Например, так:
:highlight CursorLine ctermfg=red ctermbg=lightblue
Можно аналогично подсветить столбец: это полезно если текст имеет прямоугольную структуру: например, это таблица с данными. Тогда примените команду :set cursorcolumn. Несложно догадаться, что цветовая группа называется CursorColumn. Разумно ее сделать такой же, как и для строки.
Отрисовка этой красоты может замедлять Вим, так что смотрите, надо ли оно вам. Включить/выключить подсветку несложно, а если повесить на клавишу, то и вообще легко. А можно сделать автокоманды:
au WinLeave * set nocursorline nocursorcolumn
au WinEnter * set cursorline cursorcolumn
Тогда при входе в данное окно подсветка будет включаться, а при выходе — выключаться.
В визуальном режиме подсветка отключается.
Еще с курсором связана опция cursorbind. Если она включена в двух или более окнах, то движение курсора относительно других окон смещает текст в них также. Это удобно для сравнения двух файлов, в режиме diff или просто, визуально.
Позицию курсора показывает строка информации, которую можно настроить. Она может сообщать номер строки, позицию в строке (номер байта или символа), процент текста выше курсора, номер байта и многое другое.
Обсудим номера строк: тоже своего рода указатель позиции. Есть опция number (сокращенно nu), включающая номера строк: это удобно. Отключается, как и любой флаг, добавлением no: set nonu. А есть относительные номера: relativenumber (rnu). При этом показаны относительные номера для данной строки: сама строка имеет относительный номер 0, на одну выше и ниже 1, далее 2 и т.д. Если включены обе опции, то для текущей строки показан не нуль, а абсолютный номер. Например:
2 ааа
1 ббб
42 ввв
1 ггг
2 ддд
По умолчанию на номера строк выделяется 4 позиции; три для номеров и одна для разделителя. Этого хватит, если текст в пределах тысячи строк. Далее колонки будут добавляться. Минимальное число можно изменить, задав numberwidth.
Цветовое оформление номеров строк можно изменить, изменив группу LineNr.
Запомнить позицию позволяют метки: mx ставит метку x, а `x возвращается к ней. `` возвращается к предыдущей позиции, а `" восстановит последнюю позицию перед закрытием файла.
Еще стоит упомянуть функции getcurpos() и setpos(). Первая возвращает список из пяти значений, описывающих позицию. Вторая задает позицию, принимая в качестве аргументов выражение (варианты . для курсора и 'x для метки x) и тот самый список. Возвращает 0, если позиция возможно и -1 в противном случае.
Зачем это надо? Для гроссмейстерских трюков. Можно сохранить позицию вот так, например (пример из правки Вим):
let save_cursor = getcurpos()
...
call setpos('.', save_cursor)
Удачи, коллеги!