Заметил, что часто приходится выделять слова стоящие под курсором, используя evil-mode
, применяю комбинацию (evil-inner-word
) viw/viW, но в случае когда встречаются скобки, одинарные кавычки вплотную прилегающие к слову они выделяются также, что не очень удобно.
Например, если расположить курсор на слове bounds-of-thing-at-point-mod
и попытаться выделить ‘viW’,
(funcall (get thing 'bounds-of-thing-at-point-mod))
то выделится слово с одинарной кавычкой и двумя скобками в конце.
Мне хочется, что бы выделялось само слово, но без скобок, лучше что бы это настраивалось с помощью регулярки. Вероятно уже кто то решал похожую задачу.
В инете нашел:
(defun mark-whole-word (&optional arg allow-extend)
"Like `mark-word', but selects whole words and skips over whitespace.
If you use a negative prefix arg then select words backward.
Otherwise select them forward.
If cursor starts in the middle of word then select that whole word.
If there is whitespace between the initial cursor position and the
first word (in the selection direction), it is skipped (not selected).
If the command is repeated or the mark is active, select the next NUM
words, where NUM is the numeric prefix argument. (Negative NUM
selects backward.)"
(interactive "P\np")
(let ((num (prefix-numeric-value arg)))
(unless (eq last-command this-command)
(if (natnump num)
(skip-syntax-forward "\\s-")
(skip-syntax-backward "\\s-")))
(unless (or (eq last-command this-command)
(if (natnump num)
(looking-at "\\b")
(looking-back "\\b")))
(if (natnump num)
(left-word)
(right-word)))
(mark-word arg allow-extend)))
выделяет только в право, при повторном использовании команды. Не понятно, как работают skip-syntax-(forward|backward)
и looking-(at|back)
.
Пробовал использовать evil-select-inner-object
, но понял, что в этом мало смысла, слишком связано (с evil) все, проще написать с нуля, но опыта не хватает.