Команда для окружения символа пробелами в vim
Я пытаюсь использовать 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 ответов
лично я думаю, что имеет смысл уничтожить то, что вы хотите окружить, а затем перепробовать его.
c w "" ESC P
очевидно, вы можете заменить как объект, так и кавычки на то, что вам нравится. Чтобы изменить только один символ +, чтобы быть [пробел]+[пробел], вы сделали бы
s [space] [space] ESC P
на
первое, что приходит на ум после прочтения только названия, это объемный.ВИМ который является отличным скриптом, чтобы делать все виды полезных вещей в соответствии с тем, что вы описали.
, чтобы решить вашу конкретную проблему, я бы, наверное, наведите курсор на + и:
s[пробел]+[пробел][esc]
чтобы изменить 3==4 на 3 == 4, я мог бы поместить курсор на первый =, и:
i[пробел][esc] ww.
Хах! Я довольно долго пытался понять, как окружить блок пространствами, и наконец нашел правильную комбинацию.
используя окружают.vim вы говорите объемное пространство селектора пространства.
поэтому для этого конкретного случая я бы использовал визуальный режим (хороший трюк для работы с одиночными символами под курсором BTW) таким образом: "vs"
У меня тоже есть привычка печатать такие вещи, как списки аргументов без пробелов. С этим методом вы можете просто перейти ко второму аргументу с помощью w и сказать "vws", чтобы визуально выбрать слово и окружить пробелами.
Я предпочитаю режим визуального выбора в целом. Кроме того, альтернативный синтаксис объемного звучания " ysw "исключает слово final запятая, которая поймана"vw".
Я думал об этом. я попробовал с surround.vim, но наивный подход
S<space>
(после визуального выбора) не работает, так как пространство уже занято в качестве модификатора для добавления пространства к другим окружающим парам символов. S<space><cr>
добавляет A ^M В вывод. Ss
почти работает, но вставляет пробел только перед.
после запроса в tpope / surround.ВИМ на GitHub:
S<space><space>
in визуальный режим работы. альтернативно, из нормального режима,ysl<space><space>
работает для одного символа
вы можете создать макрос с одним из описанных действий и вызывать его каждый раз, когда вам это нужно (например, амфетамин, предложенный во время написания), или вы можете просто найти и заменить:
:%s/\(\d\)\(+\|-\)\(\d\)/ /g
вероятно, вам придется выполнить эту команду два раза, потому что она будет находить только каждое второе появление +/-.
EDIT:
это заменит все без необходимости вызывать дважды:
:%s/\d\@<=+\|-\d\@=/ /g
попробуйте расположить курсор над " + " и введите следующее:
q1i[пробел][стрелка вправо][пробел][стрелка влево][esc]q
это запишет быстрый макрос в слот 1, который вы можете повторно использовать, когда захотите, который окружит символ под курсором пробелами. Вы можете перезвонить с @1
.
существует также более универсальный:
q1ea[пробел] [esc]bi[пробел][справа стрелка] [esc]q
который будет окружать слово под курсором ("=="считается словом) пробелами при нажатии @1
.
вы можете настроить такое отображение (нажмите enter в визуальном режиме, чтобы обернуть пробелы):
:vnoremap <CR> <ESC>`<i<SPACE><ESC>`>la<SPACE><ESC>h
этот метод позволяет использовать . повторить команду на следующем +.
наведите курсор на + и введите:
s[SPACE][CTRL-R]"[SPACE][ESC]
Я знаю, что это и старый поток, но это может быть полезно кому-то. Я нашел, что карта (карта это все, что вы хотите!)
noremap <leader>ss diwi<SPACE><C-R>"<SPACE><ESC>B
работает нормально как для превращения "a+b" в "a + b" (при использовании над символом"+"), так и для превращения "a==b" в "a == b" (при использовании над первым или вторым знаком"=").
Я надеюсь, что это полезно кому-то.