Vimでは、backspace
モードでinsert
キーを押すと、^?
文字が残り、削除するはずの文字は削除されません。
.vimrc
に次のものがあります
syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
これはコマンドモードでも発生します。保存するためにW
の代わりにw
を誤って入力すると、backspace
キーを押すと、次のように表示されます。
:W^?
何が間違っているのか、どのように修正するのか?
更新:この質問をSOに投稿する前に、基本的なGoogle検索を実行し、検索結果の最初のページからすべての提案を試みましたが、失敗しました。
@strcat vimバージョン7.0.237、KDEコンソール1.6.4、Linux 2.6.18 x86_64マシンを使用しています。
@graywh w.r.t cat -v、削除の場合、^[[3~
を取得し、バックスペースの場合、^?
を取得します。
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
^?
は削除文字です。バックスペース文字は^H
。これらのうち1つだけが端末によって「消去」として認識され、これは端末設定stty
によって決定されます。 (bashと他のシェルはこれを問題として理解し、両方を認識するために特別なことをします)
端末エミュレーター(ssh、PuTTY、xtermなど)が端末設定と一致しない場合、この動作が発生します。通常はデフォルトで正しいですが、非常に多くの場合、人々は.bashrcにstty
コマンドを入れてしまいます。
おそらくstty erase ^H
あなたのbashrcで。その場合は、それを取り除くか、端末設定を変更してバックスペースに^H
DELの代わりに(^?
)
Vimマッピングでこれを修正することもできますが、それは基本的な問題を無視しています。
vim wiki Backspace_and_delete_problems から、続きを読んで:help :fixdel
それはこれを示唆している:
if &term == "termname"
set t_kb=^V<BS>
fixdel
endif
「^ V」はCTRL-V、「」はバックスペースキーです
(4文字入力しないでください!)。 「termname」を置き換えます
ご使用の端末名。
私にとっては、fixdel
はバックスペースを削除のように機能させます。私の最初の間違いは、gvimでCTRL-Vバックスペースを実行することでした.
私は今.vimrc
:
if &term == "xterm-256color"
set t_kb=^?
endif
試してみる ctrl+del/ctrl+backspace または alt+del/alt+backspace、私はどれを覚えていないが、私はそれがあなたのためのトリックを行うと思います。
うまくいかない場合は試してください shift+backspace/del。以前にこの問題に遭遇したことがあります。削除するために正しい文字コードを送信するために押すことができるコンボキーがあります。
追加してみてください:
noremap! <C-?> <C-h>
あなたの~/.vimrc
。
これはC-?をマップしますバックスペースに、そして私のために働いた。
Ctrl + Hが機能していなかったことを除いて、まったく同じ問題がありました。 stty
設定も問題ありません。誰かが同じ問題を抱えるなら、私の環境に言及したいだけです:
fixdel
を.vimrc
に追加すると動作します!上記のすべての修正は機能しませんでした。
この問題に対する適切な修正は、「ターミナル>キーボード」設定を設定して、PuTTYでBackspaceキーを「Control-H」にマップすることです。これは、PuTTYを使用していて、「^?」が発生している場合です。 Backspaceキーを押すときの問題。
これに関する記事をここに作成しました:
https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/
提案してくれた@ j03mに感謝します!
Vimバックスペースが^?
を残すのと同じ問題がありましたが、コマンドラインでは正常に機能していました。
これは、vimマッピングを使用して、私のために働いたものです:
In .vimrc, type: imap ^? ^H
これはCTRL-H(vimのデフォルトのバックスペース)をバックスペースキーにマッピングします。お役に立てば幸いです。
この答えは私のために働いた: http://vim.wikia.com/wiki/Backspace_and_delete_problems
基本的に、set backspace=2
in .vimrcが機能します。
.bashrcにstty erase ^?を入れます
。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
消去は新しい値^?
で変更され、バックスペースが動作するようになります。
Macで、ターミナルを使用している場合は、[設定]-> [プロファイル]-> [詳細設定]に移動し、[送信コントロールの削除-H]を選択します。
KDEを使用している場合、私はその痛みを知っています。これは私がこれまでに見つけた最も包括的なソリューションです http://www.yalla.nu/blog/post/86
私にとっては、それはsttyの問題でした。同様のstty -a
あなたのものとして出力。
_stty sane
。
これにより、バックスペース/削除の問題が修正されただけでなく、矢印キーも修正されました。
この問題が発生し、.vimrcで次の設定が見つかりました。
:set t_kb=^H
その行を削除することで問題は解決しました。
CSHを使用したFreeBSDでは、.cshrcでこれを置き換える必要があります。
bindkey "^W" backward-delete-Word
これとともに :
bindkey "^?" backward-delete-Word