web-dev-qa-db-ja.com

vimバックスペースの葉^?

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
54

^?は削除文字です。バックスペース文字は^H。これらのうち1つだけが端末によって「消去」として認識され、これは端末設定sttyによって決定されます。 (bashと他のシェルはこれを問題として理解し、両方を認識するために特別なことをします)

端末エミュレーター(ssh、PuTTY、xtermなど)が端末設定と一致しない場合、この動作が発生します。通常はデフォルトで正しいですが、非常に多くの場合、人々は.bashrcにsttyコマンドを入れてしまいます。

おそらくstty erase ^Hあなたのbashrcで。その場合は、それを取り除くか、端末設定を変更してバックスペースに^H DELの代わりに(^?

Vimマッピングでこれを修正することもできますが、それは基本的な問題を無視しています。

66
evil otto

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
6
Morgan

試してみる ctrl+del/ctrl+backspace または alt+del/alt+backspace、私はどれを覚えていないが、私はそれがあなたのためのトリックを行うと思います。

うまくいかない場合は試してください shift+backspace/del。以前にこの問題に遭遇したことがあります。削除するために正しい文字コードを送信するために押すことができるコンボキーがあります。

4
Ryan

追加してみてください:

noremap! <C-?> <C-h>

あなたの~/.vimrc

これはC-?をマップしますバックスペースに、そして私のために働いた。

4
Taiki

Ctrl + Hが機能していなかったことを除いて、まったく同じ問題がありました。 stty設定も問題ありません。誰かが同じ問題を抱えるなら、私の環境に言及したいだけです:

  • X ofcourseの下で、xtermでcygwinを使用する:)
  • RHEL6.4-> bash-> tmux-> vimに切り替え

fixdel.vimrcに追加すると動作します!上記のすべての修正は機能しませんでした。

3
holms

この問題に対する適切な修正は、「ターミナル>キーボード」設定を設定して、PuTTYでBackspaceキーを「Control-H」にマップすることです。これは、PuTTYを使用していて、「^?」が発生している場合です。 Backspaceキーを押すときの問題。

これに関する記事をここに作成しました:

https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/

提案してくれた@ j03mに感謝します!

3
Alvin Bunk

Vimバックスペースが^?を残すのと同じ問題がありましたが、コマンドラインでは正常に機能していました。

これは、vimマッピングを使用して、私のために働いたものです:

In .vimrc, type:      imap ^? ^H

これはCTRL-H(vimのデフォルトのバックスペース)をバックスペースキーにマッピングします。お役に立てば幸いです。

3
BRASIL

この答えは私のために働いた: http://vim.wikia.com/wiki/Backspace_and_delete_problems

基本的に、set backspace=2 in .vimrcが機能します。

2
dzhi

.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

消去は新しい値^?で変更され、バックスペースが動作するようになります。

1
Parth

Macで、ターミナルを使用している場合は、[設定]-> [プロファイル]-> [詳細設定]に移動し、[送信コントロールの削除-H]を選択します。

KDEを使用している場合、私はその痛みを知っています。これは私がこれまでに見つけた最も包括的なソリューションです http://www.yalla.nu/blog/post/86

0
8A52

私にとっては、それはsttyの問題でした。同様のstty -aあなたのものとして出力。
_stty sane

これにより、バックスペース/削除の問題が修正されただけでなく、矢印キーも修正されました。

0
OmaruSensei

この問題が発生し、.vimrcで次の設定が見つかりました。

:set t_kb=^H

その行を削除することで問題は解決しました。

0
frankster

CSHを使用したFreeBSDでは、.cshrcでこれを置き換える必要があります。

bindkey "^W" backward-delete-Word

これとともに :

bindkey "^?" backward-delete-Word
0