2016-03-10 3 views
0

Чтобы добавить визуальный интерес к моим комментариям и/или текстовые заметки, я обычно ставлю 1 место между каждой частью символов, например:Добавить пробелы между символами на визуальном выборе в Vim

////////////////////////////////////////// 
// VERY IMPORTANT NOTE 
////////////////////////////////////////// 

////////////////////////////////////////// 
// V E R Y I M P O R T A N T N O T E 
////////////////////////////////////////// 

Это просто достаточно с «нормальным» редактором (вы просто нажимаете <right arrow> <space> до конца слова/линии), но теперь, когда я привыкаю к ​​Vim, это кажется таким странным: должен быть лучший способ.

Также в Vim не так просто: я могу создать макрос с «a <space> <esc> l», но он немного неуклюжий, особенно потому, что вам нужно подсчитать, сколько раз вы хотите повторить макрос. Есть ли способ визуально выбрать строку/слово/что угодно и делать то, что мне нужно сделать автоматически?

Я прочитал this answer here on S.O., которые в основном достигают того, что я хочу, с регулярным выражением [%s/pattern/\=join(split(submatch(0),'\zs'), ' ')/g], но я не могу придумать способ использования моего визуального выбора вместо определенного шаблона.

Любая идея, прежде чем я начну думать о том, как создать плагин? Спасибо!

ответ

2

насчет:

:xnoremap µ s<c-r>=substitute(@", '.\ze.', '& ', 'g')<cr> 

v_s сократить выделение и поместить его в регистр по умолчанию @", то вы можете повторно вводить его трансформируются благодаря i_CTRL-R= и substitute(). Вы также можете использовать split() + join(), если хотите, но \ze. уже позаботился о том, чтобы не добавлять дополнительное пространство после последнего выбранного символа.

+0

Это на самом деле довольно близко, спасибо! Только пара «недостатков»: он добавляет пробел перед выбором, и он не работает так хорошо с выбранной строкой [с помощью команды V] (я думаю, проблема заключается в символе новой строки, который он не пропускает подстановка, поэтому вы получаете ''). Но эй, ты уже на 98% ... можешь ли ты дойти до 100%? : D –

+0

Кроме того, я добавил окончательный к сопоставлению, чтобы лучше «обернуть его». –

+1

Я представил регрессию с моим редактированием, это должно быть '. \ Ze.' –

0

В качестве справки, вот полное решение, которое я принял.

Основываясь на ответе Люка Хермита, я закончил картографирование в двух разных режимах.

Первый в визуальном режиме:

vnoremap ç s<c-r>=substitute(@", '.\ze.', '& ', 'g')<cr><esc>

Это просто применить блестящее решение Люка, добавляя пробелы между всеми выбранными символами.

Второй в нормальном режиме:

nnoremap ç 0v$hs<c-r>=substitute(@", '.\ze.', '& ', 'g')<cr><esc>

Этот, очень так же, предварительно выбрать (с 0v$h) в визуальном режиме текущей строки за исключением последнего символа новой строки, перед применением команды Люка.

Очень полезный материал, и я многому научился в этом процессе!

Надеюсь, это полезно, наслаждайтесь Vim :)