Это не имеет никакого отношения к Vim, все редакторы ведут себя таким образом (включая emacs), они рассматривают несловарные символы как разделители. В любом случае, поведение, о котором вы говорите, контролируется readline
и в его руководстве перечислены довольно много команд, которым вы можете назначить ярлыки. Я вставляю несколько соответствующих здесь, но я рекомендую вам прочитать man readline
для получения дополнительной информации:
backward-word (M-b)
Move back to the start of the current or previous word. Words
are composed of alphanumeric characters (letters and digits).
kill-line (C-k)
Kill the text from point to the end of the line.
kill-word (M-d)
Kill from point the end of the current word, or if between
words, to the end of the next word. Word boundaries are the
same as those used by forward-word.
backward-kill-word (M-Rubout)
Kill the word behind point. Word boundaries are the same as
those used by backward-word.
unix-word-rubout (C-w)
Kill the word behind point, using white space as a word bound‐
ary. The killed text is saved on the kill-ring.
unix-filename-rubout
Kill the word behind point, using white space and the slash
character as the word boundaries. The killed text is saved on
the kill-ring.
Таким образом, вы хотите использовать backward-kill-word
, которое использует не буквенно-цифровые символы в качестве границ слов. По умолчанию он назначен Alt+Backspace, но вы можете изменить это с помощью глобального /etc/inputrc
если вы хотите, чтобы они применялись ко всем пользователям, или (лучше) вашего локального $HOME/.inputrc
.
Насколько я могу судить, Ctrl+W зарезервирован, и вы не можете использовать его, но вы можете выбрать другой ярлык, например, Ctrl+J. Создайте файл $HOME/.inputrc
если он не существует, и добавьте в него следующую строку:
Control-J: backward-kill-word
Этого должно быть достаточно для большинства современных эмуляторов терминала. Однако некоторые старые терминалы используют разные коды. Например, если вы используете xterm
, строка выше должна быть записана как:
C-J: backward-kill-word