Vim backspace leaves ^?
В Vim, когда я нажимаю клавишу backspace
в режиме insert
, он оставляет символ ^?
и не удаляет символ, который он должен удалить.
В моем .vimrc
есть следующее:
syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
Это также происходит в командном режиме. Когда я ошибочно набираю W
вместо W
для сохранения, я нажимаю клавишу backspace
, и это дает мне следующее:
:W^?
Любая идея о том, что не так и как ее исправить?
UPDATE: перед отправкой этого вопроса в SO, я выполнил базовый поиск в Google и пробовал все предложения с первой страницы результата поиска, но безуспешно.
@strcat Я использую vim версию 7.0.237, консоль KDE 1.6.4, Linux 2.6.18 x86_64.
@graywh w.r.t cat -v, для delete, я получаю ^[[3~
и для backspace я получаю ^?
.
Вывод stty -a
выглядит следующим образом
speed 38400 baud; rows 38; columns 194; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Ответы
Ответ 1
^?
- символ удаления; символ обратного пространства ^H
. Только один из них распознается вашим терминалом как "стереть", и это определяется настройками терминала, stty
. (bash и другие оболочки понимают это как проблему и делают специальные вещи для распознавания обоих)
Если ваш эмулятор терминала (ssh, putty, xterm, whatever) не согласуется с вашими настройками терминала, вы видите это поведение. Обычно это по умолчанию, но очень часто люди ставят команды stty
в свой .bashrc, что ломает вещи.
У вас, вероятно, есть что-то вроде stty erase ^H
в вашем bashrc. Если вы это сделаете, избавитесь от него или измените настройки терминала, чтобы иметь backspace, отправьте ^H
вместо DEL (^?
)
Вы также можете исправить это с помощью сопоставлений vim, но игнорируя основную проблему.
Ответ 2
Пожалуйста, проверьте приведенную ниже ссылку, чтобы помочь отладить вашу проблему:
http://vim.wikia.com/wiki/Backspace_and_delete_problems
EDIT:
я нашел то, что похоже на аналогичную проблему с описанной вами вами:
http://lj4newbies.blogspot.com/2007/05/backspace-and-delete-keys-problem-in.html
Ответ 3
Из vim wiki Backspace_and_delete_problems, я продолжил читать :help :fixdel
, это предлагает следующее:
if &term == "termname"
set t_kb=^V<BS>
fixdel
endif
Где "^ V" - это CTRL-V, а "- это обратный пробел
(не вводите четырех символов!). Заменить" termname"
с именем вашего терминала.
Для меня fixdel
делает backspace работать как delete. Моя первая ошибка заключалась также в том, что CTRL-V backspace в gvim, в системе, что вы не можете заставить ключ работать должным образом, чтобы он вставлял ключ backspace, который видит проблемный сеанс.
Теперь у меня есть .vimrc
:
if &term == "xterm-256color"
set t_kb=^?
endif
Ответ 4
Попробуйте ctrl + del/ctrl + backspace или alt + del/alt + backspace, я не могу вспомнить, что, но я думаю, что это сделает трюк для вы.
Если это не работает, попробуйте shift + backspace/del. Я столкнулся с этой проблемой раньше, есть комбо-ключ, который вы можете нажать, чтобы отправить правильный код char, чтобы выполнить удаление.
Ответ 5
Имела точно такую же проблему, за исключением того, что Ctrl + H не работал у меня. Настройки stty
также прекрасны. Просто хочу указать мою среду, если у кого-то будут проблемы:
- Использование cygwin с xterm, под X of the course:)
- Ssh'ed to RHEL6.4 → bash → tmux- > vim
После добавления fixdel
в .vimrc
он работает! Все исправления выше не работали для меня.
Ответ 6
У меня была такая же проблема, когда vim backspace покидает ^?
, в то время как в командной строке он работал правильно.
Это то, что сработало для меня, используя сопоставление vim:
In .vimrc, type: imap ^? ^H
Это отобразит CTRL-H (который является обратным пространством по умолчанию в vim) для клавиши backspace.
Надеюсь, что это поможет.
Ответ 7
Хорошим решением этой проблемы является установка параметров "Terminal > Keyboard" для сопоставления клавиши Backspace с "Control-H" в PuTTY; Это если вы используете PuTTY и испытываете "^?" проблема при нажатии клавиши Backspace.
Я создал статью об этом здесь:
https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/
Спасибо @j03m за предложение!
Ответ 8
Попробуйте добавить:
noremap! <C-?> <C-h>
на ваш ~/.vimrc
.
Это отображает C-? для backspace, и работал у меня.
Ответ 9
Этот ответ работал для меня: http://vim.wikia.com/wiki/Backspace_and_delete_problems
По сути, установка set backspace=2
в .vimrc работает.
Ответ 10
поставьте stty erase ^? в свой .bashrc
Запустите свой .bashrc
выполнить команду: stty -a
speed 38400 baud; rows 48; columns 157; line = 0;
intr = ^C; quit = ^\; ***erase = ^?***; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Теперь стирание будет изменено с новым значением ^?
, и ваше backspace должно работать теперь.
Ответ 11
На Mac, если вы используете терминал, перейдите в "Настройки" → "Профили" → "Дополнительно", затем выберите "Удалить Sends Control-H"
Ответ 12
Если вы используете KDE, я знаю эту боль.
Это наиболее полное решение, которое я нашел до сих пор
http://www.yalla.nu/blog/post/86
Ответ 13
У меня была эта проблема и я нашел следующую настройку в моем .vimrc:
:set t_kb=^H
Удаление этой линии решило проблему.
Ответ 14
В FreeBSD с CSH вы должны заменить это в вашем .cshrc:
bindkey "^W" backward-delete-word
С этим:
bindkey "^?" backward-delete-word
Ответ 15
Для меня это была проблема stty, у меня был такой же вывод stty -a
как и у вас.
Это исправили для меня, запустив stty sane
.
Это не только исправило проблему возврата/удаления, но и исправило клавиши со стрелками.