Команда для окружения персонажа пробелами в vim - PullRequest
10 голосов
/ 14 марта 2010

Я пытаюсь использовать vim правильно - чтобы помочь мне, я сопоставил свои клавиши со стрелками "", так что я вынужден использовать {hjlk} для передвижения.

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

"2 + 3" лучше отформатирован "2 + 3"

Ранее я поместил бы курсор на + и набрал бы:

i [пробел] [стрелка вправо] [пробел] [Esc]

Это 5 нажатий.

Чтобы сделать это без стрелки, мне, кажется, нужно навести курсор на + и перейти:

i [пробел] [Esc] lli [пробел] [Esc]

Это 8 нажатий.

Я могу преобразовать "li" в "a", что уменьшает его до 7 нажатий:

i [пробел][Esc] la [пробел] [Esc]

Если не считать записи в макрос, есть ли лучший способ сделать это?Есть ли какая-то волшебная команда vim, которая позволит мне сделать это менее чем за 5 нажатий - и какой-то способ обобщить ее, чтобы я мог сделать это для целых слов или символов, например, если я хочу преобразовать 3 == 4 в 3== 4?

Ответы [ 9 ]

16 голосов
/ 14 марта 2010

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

c w "" ESC P

Очевидно, вы можете заменить как объект, так и кавычки на что угодно. Чтобы изменить только один символ + на [пробел] + [пробел], вы должны сделать

s [space] [space] ESC P

на +

5 голосов
/ 14 марта 2010

Первое, что приходит на ум после прочтения только заголовка, это round.vim , который является отличным сценарием для выполнения всех видов полезных действий в соответствии с тем, что вы описали.

Чтобы решить вашу конкретную проблему, я бы, вероятно, поместил курсор на + и:

s [пробел] + [пробел] [ESC]

Чтобы изменить 3 == 4 на 3 == 4, я мог бы навести курсор на первый =, и:

я [пробел] [ESC] жв.

3 голосов
/ 15 апреля 2012

Хах! Я довольно долго пытался понять, как окружить блок пробелами, и наконец нашел правильную комбинацию.

Используя Surround.vim, вы говорите, пробел селектора пространства.

Так что для этого конкретного случая я бы использовал визуальный режим (хороший прием для работы с отдельными символами под курсором): «vs» <- четыре нажатия клавиш! </p>

У меня также есть привычка печатать такие вещи, как списки аргументов без пробелов. С помощью этой техники вы можете просто перейти ко второму аргументу, используя w, и сказать «vws», чтобы визуально выделить слово и окружить пробелами.

Обычно я предпочитаю режим визуального выбора. Кроме того, альтернативный синтаксис объемного звучания "ysw" исключает запятую слова "окончание", которая определяется "vw".

2 голосов
/ 20 февраля 2014

Мне тоже интересно об этом. я пробовал с surround.vim, но наивный подход

S<space>

(после визуального выделения) не работает, так как пробел уже занят модификатором для добавления пробела к окружающим парам символов S<space><cr> добавляет ^ M в вывод. Ss почти работает, но вставляет пробел только раньше.

после запроса в tpope /round.vim на github:

S<space><space>

в визуальном режиме работает. альтернативно, из обычного режима ysl<space><space> работает для одного символа

1 голос
/ 25 ноября 2015

Этот метод позволяет использовать. повторить команду при следующем +.

Наведите курсор на + и введите:

s[SPACE][CTRL-R]"[SPACE][ESC]
1 голос
/ 15 марта 2010

Вы можете настроить отображение следующим образом (нажмите Enter в визуальном режиме для переноса пробелов):

:vnoremap <CR> <ESC>`<i<SPACE><ESC>`>la<SPACE><ESC>h
1 голос
/ 14 марта 2010

Вы можете создать макрос с одним из описанных действий и вызывать его каждый раз, когда вам это нужно (как предложено amphetamachine, пока я писал), или вы можете просто найти и заменить:

:%s/\(\d\)\(+\|-\)\(\d\)/\1 \2 \3/g

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

EDIT:

Это заменит все без необходимости повторного вызова:

:%s/\d\@<=+\|-\d\@=/ \0 /g
1 голос
/ 14 марта 2010

Попробуйте навести курсор на «+» и наберите:

q1i [пробел] [стрелка вправо] [пробел] [стрелка влево] [esc] q

Это запишет быстрый макрос в слоте 1, который вы можете использовать повторно, когда захотите, который окружит персонажа под курсором пробелами. Вы можете перезвонить по номеру @1.

Есть и более универсальный:

q1ea [пробел] [esc] bi [пробел] [стрелка вправо] [esc] q

Который будет окружать слово под курсором ("==" считается словом) с пробелами при нажатии @1.

0 голосов
/ 05 августа 2016

Я знаю, что это и старая ветка, но это может быть кому-то полезно. Я обнаружил, что карта (сопоставьте ее с чем угодно!)

noremap <leader>ss diwi<SPACE><C-R>"<SPACE><ESC>B

работает нормально как для превращения «a + b» в «a + b» (при использовании над символом «+»), так и для превращения «a == b» в «a == b» (когда используется над первый или второй знак «=»).

Надеюсь, это кому-нибудь пригодится.

...