Есть ли способ увеличить / уменьшить первую цифру после / под курсором, а не целую цифру.
Я знаю, что это не то, как работает Vim, но есть ли плагин, который делает это? Я не смог его найти.
Это очень полезно при редактировании CSS и в других случаях.
Данный:
▐margin: 10px
Когда я нажимаю, CTRL-A
я хочу видеть:
▐margin: 20px
Актуально:
▐margin: 11px
key-bindings
arithmetic
firedev
источник
источник
10<C-a>
можете добавить 10 илиr2
заменить 1 на 2.Ответы:
Это, кажется, работает довольно хорошо, и делает довольно вменяемые вещи при использовании
<C-a>
на 9 (95 становится 105), или<C-x>
на 0 (105 становится 95):search()
имеет преимущество не сброса@/
.a <Esc>h
- Перейти в режим вставки, добавить пробел после цифры и перейти влево, чтобы курсор находился сверху цифры.<C-a>
или<C-x>
.lxh
чтобы удалить пространство, которое мы добавили.Я сопоставил это с
g<C-a>
иg<C-x>
, так что вы все еще можете назвать оригинал.Немного другая версия, которая будет искать только цифры в текущей строке (но оставит висячий пробел, если в текущей строке нет номера):
А вот еще одна версия, которая использует ту же концепцию, что и раньше, но также добавляет пробел перед цифрой. Это заставит
g<C-a>
игнорировать любой знак munis перед числом (по умолчанию,<C-a>
on-42
будет увеличивать его до-41
.Он также принимает счетчик, так что
5g<C-a>
увеличит число на 5:источник
Базовый прирост
Вот простой макрос для выполнения действия:
В обычном режиме вы
m`
Отметьте свое местоположениеl
переместить один символ вправоv$x
сократить до конца линииh
вернуться в исходное положение<c-a>
увеличение (или уменьшение)p
приклеить свой разрез``
вернуться к своей отметкеПерейти к следующему номеру
Если вы хотите перейти к следующему номеру (или остаться в текущей позиции, если находитесь на номере), вам нужна функция, которая проверяет текущий курсорный символ и, возможно, переходит на следующий номер.
NextNum
получает символ под курсором, проверяет, является ли его число, а если нет, ищет следующий номер. После этого все остальное тоже самое. Если вы хотите, чтобы отображение было другим, просто измените то,nnoremap <leader>a
что вы хотите, напримерnnoremap <c-a>
.Игнорирование негативов и чисел выше 9
Если вы хотите просто циклически перебирать цифры и не использовать их в качестве целых чисел со знаком, следующие функции будут увеличиваться и уменьшаться и переходить в 0 и 9.
Теперь, когда вы находитесь
8
и печатаете,<leader>a
вы получаете9
. Выполнение этого снова приводит к0
. Если вы нажмете<leader>x
на0
вы получите9
. То же самое касается отрицательных чисел. Функции обрезают один символ, увеличивают, уменьшают или переворачивают, а затем вставляют на место.источник
<c-a>/<c-x>
также.<c-a>
и<c-x>
что-то еще, потому что поведение по умолчанию не так полезно.<c-a>
и<c-x>
много. Каждый раз, когда я обновляю версию или увеличиваю переменную диапазона, я просто[N]<c-a>
вместо удаления и замены.<c-a>
и<c-x>
которые должны быть отброшена для функции , которая делает то же самое , но игнорирует тир.Вот версия, которую я написал, используя выражение замены:
Каждый из них просто ищет первый символ цифры в строке и добавляет или вычитает его, если он находится в диапазоне [0-8] или [1-9], соответственно. У него есть три проблемы:
"/
и если у вас включен hlsearch, то все числа в текущем буфере будут подсвечены при использовании этого. Вы можете добавить:noh<CR>
к каждой из вышеперечисленныхmap
команд, чтобы остановить выделение, но я не знаю, как правильно предотвратить засорение регистра.Кроме того, если бы это был я, я бы сопоставил вышесказанное с
<leader>a
и<leader>x
, а не сCTRL-A/X
. Таким образом, вам доступны оба варианта поведения.<leader>
по умолчанию это ключ обратной косой черты (\
).источник
:noh
. Но реальная проблема заключается в том, что он не может использовать позицию курсора в качестве основы, и, следовательно, вы можете увеличивать только первую цифру в строке.noremap
) и никогдаmap
. Смотрите эту страницу для более подробного объяснения этого.