2015-09-24 4 views
4

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

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

+0

А вы против только записей макросов и его выполнение (при выполнении его требуется ровно два нажатия клавиши)? – merlin2011

+0

Для быстрого смещения слов я разработал плагин [Vim Markup Assistant] (https://github.com/RubenVerborgh/vim-markup-assistant), который переключает жирный шрифт простым нажатием F8. Мне может показаться излишним, чтобы решить эту проблему с помощью всего плагина, но я так часто нуждался в этом, что это реальная экономия времени, в отличие от «ysiwb» или подобного. –

ответ

8

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

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

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

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

Для получения дополнительной информации о настройке окружения см. :h surround-customizing.

+0

Хорошее предложение ... достаточно смешно Я нашел это в своей собственной настройке Vim, когда смотрел, но не совсем так, как вы его показываете (см. мой обновленный ответ, если вы заинтересованы в том, как это сделать прямо в '.vimrc'). –

4

Установите плагин 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**" 
+0

Это работает, как вы упомянули; однако он не работает, если вы выбираете визуальный блок (в визуальном режиме) и окружаете этот визуальный блок с помощью *. – George

+0

Ну, vim-повторы не совсем согласованы при использовании с визуальными блоками, поэтому не слишком удивительно ... –

1

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

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

qqysiw*q 

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

@q 

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

qqysiw*ysiw*q 
0

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

0

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

1) визуальная область команды boldifier, например:

:vmap \q di****<ESC>hP 

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

2) команда вставки-режим boldify последнего письменное слова:

:imap \q <ESC>diwi****<ESC>hPlla 

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

:map \q diwi****<ESC>hP 
Смежные вопросы