Double vim-surround с *

Предположим, что мой курсор находится внутри слова word. Используя vim-surround, ввод последовательности ysiw* заменит word на *word*.

Вопрос: Есть ли одна последовательность, которую я могу напечатать, вместо этого создаю **word** (т.е. общий метод уценки для смещения слова)? Это противоречит типизации ysiw* дважды, что кажется громоздким.

5 ответов

@Ответ Дэна Лоу об использовании repeat.vim и . включен. Однако вы также можете создать настраиваемое окружение, чтобы сделать обычные действия более быстрыми.

Добавьте в свой ~/.vim/after/ftplugin/markdown.vim файл следующее:

let b:surround_{char2nr('b')} = "**\r**"

Теперь вы можете сделать ysiwb для окружения двойным * (b для жирного шрифта).

Подробнее о настройке окружения см. :h surround-customizing.


Установите плагин vim-repeat, и вы можете сделать это с помощью . (оператор повтора).

Вам понадобится, вероятно, использовать ysiw*l. здесь, потому что (по крайней мере, когда я тестировал) surround.vim оставляет курсор на первом окружающем персонаже, поэтому вам нужно вернуться в слово, чтобы повторить последний окружающий. В противном случае вы получите ***word*.

Обновление:. Интересно, после прочтения ответа Питера Ринкера, который упоминает этот ответ, я нашел то, что он предложил, в моей собственной установке Vim. Но я не помещал его в файл после файла, мой непосредственно находится в .vimrc, например:

autocmd FileType markdown,octopress let b:surround_{char2nr('i')} = "*\r*"
autocmd FileType markdown,octopress let b:surround_{char2nr('b')} = "**\r**"


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

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

qqysiw*q

И затем используйте следующий повтор для второго экземпляра.

@q

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

qqysiw*ysiw*q


Как немного другой подход, мы можем определить новые команды:

1) команда визуального облачного облака, например:

:vmap \q di****<esc>hP
</esc>

(удалите визуальную область, вставьте "****", положите ее обратно посередине). Используйте его как ve\q.

2) команду insert-mode, чтобы отменить последнее записанное слово:

:imap \q <esc>diwi****<esc>hPlla
</esc></esc>

3) слово boldify с нормальным режимом под курсором:

:map \q diwi****<esc>hP
</esc>


С lh-brackets в документах по уценке вы можете ввести _ дважды в текущем слове в обычном режиме, что создает тот же результат в уценке после рендеринга. Вы также можете ввести \* дважды, но это немного более громоздко.

licensed under cc by-sa 3.0 with attribution.