Всем привет. Продолжаем тему выделения текста. Про способ, принятый в Вим, я уже рассказывал: команды семейства v, распространяется командами движения (в том числе стрелками), потом применяются команды копирования/вставки, смены регистра, а также команды ex к выделенным строкам. Можно выделять и мышью, если она включена. Называется он visual mode: визуальный режим. Выделил визуально текст и применил команду.
А есть малоизвестный (и не очень нужный, на мой взгляд) режим выделения, похожий на классический: выделил текст, и он замещается новым. Называется select mode: режим выделения.
Включить его можно разными способами:
- Командами gh, gH, g<C-h>, которые аналогичны командам v, V, <C-v> для режима визуального. Этот способ доступен всегда, если только вы не переопределили команду. Попробуйте...
- Можно выделить текст в визуальном режиме и нажать <C-g>, переключив режим на выделение. Если команду <C-g> вы не переопределили.
- Можно задать переменную selectmode, задав значения через запятую; если входит cmd, то команды v, V, <C-v> включают этот режим, а не визуальный.
- Если эта переменная содержит key, то стрелки (включая PgUp и пр.) с Shift позволяют выделять текст. Переменная keymodel должна включать startsel. Если она включает, а selectmode не включает key, то стрелки с шифтом выделяют текст в визуальном режиме.
- Можно использовать мышь, если переменная selectmode содержит mouse, а переменная mouse содержит v или a.
Любые клавиши ввода текста, в том числе пробел, новая строка и т.п., удаляют текст и переводят Вим в режим вставки. Набранный символ вставляется.
Клавиши-стрелки (включая PgUp, Home и т.д., как и выше) раздвигают выделение.
<C-g>, как уже указано, переключает режим в визуальный. А <C-o> делает это на одну команду и потом возвращается.
Привязки типа vmap действуют и для визуального, и для режима выбора. Но для последнего есть свои привязки семейства smap.
Я не очень понимаю смысл этого режима. Копировать текст из него нельзя (только переходом в визуальный или привязкой), вставлять тоже. Только заменить новым. Это может быть полезно, наверное: в визуальном режиме надо нажать c сначала, а тут не надо. Но основной смысл вижу для сложной настройки редактора, чтобы сделать из Вим что-то иное. Можно, например, сделать форму, в которой можно заполнять поля, и потом Вим сам на базе этого что-то там сделает.
Вот D. Neil в Practical Vim упоминает создание плагинов, в которых в режиме выделения подсвечивается место, куда надо что-то впечатать. Будет написано "дата рождения" и выделено, и начнешь печатать, и оно заместится. Что-то вроде.