各キーの操作(押下)で期待する動作
メタキー (Delete キー, Home キー , End キー, Insert キー) の操作(押下)として期待する動作は、以下のとおりです。
( ここでは、Delete キーとの動作の違いを区別しておきたいので、BackSpace キー の動作についても記載しています。)
- Delete キー は、カーソル上に一文字を消す
[ シェルのコマンドライン ]
[ Delete キーを押すとカーソル上に一文字が消える ]
- BackSpace キー は、カーソルの前の一文字を消す
[ シェルのコマンドライン ]
[ BackSpace キーを押すとカーソルの前の一文字が消える ]
- Home キー は、カーソルを先頭へ移動する
[ シェルのコマンドライン ]
[ Home キーを押すとカーソルが先頭へ移動 ]
- End キー は、カーソルを最後尾へ移動する
[ シェルのコマンドライン ]
[ End キーを押すとカーソルが最後尾へ移動 ]
- Insert キー は、挿入モード・上書きモードを切り替える
メタキーの動作がおかしい(期待している動作と異なる)場合の対処
Delete キー押すとBackSpace と同じ動作をしてしまう
[ 現象 ]
[ シェルのコマンドライン ]
[ Delete キー , BackSpace キー いずれを押してもカーソルの前の一文字が消える ]
[ 対処 ]
これは、ほとんどの場合、SSH,Telnetなどによるリモート接続時の問題だと思います。
その場合、まず確認すべきは、
SSH,Telnetのクライアントソフトが、メターキーのDelete (Del) キーを押した時に DEL 文字を送出していないかでしょう。
以下は、SSHクライアントソフト Tera Termの設定例です。
- メニュー [ 設定 ] → [ キーボード ] でキーボードの設定画面を開く。
[ DELを送信するキー ] という項目がありますので、このチェックを全て解除し、[ OK ]ボタンをクリックします。
- メニュー [ 設定 ] → [ 設定の保存 ] で TERATERM.INI に保存する。
必ず、保存しておかないと次回TeraTermを使用する際、元の戻ってしまいます。
これで、DEL 文字の送信はなくなりました。
これでも動作が直らない場合は、端末タイプを疑った方が良いかもしれません。
Tera Termの場合であれば、
接続先へ送信する端末種別情報を Tera Term の設定ファイル ( TERATERM.INI : インストール先ディレクトリにある )に持っています。
ここでは、その情報を編集してみます。
[Tera Termインストール先ディレクトリ]\TERATERM.INI 内のTermType情報を以下のように編集すればOKです。
( このファイルは、テキストファイルなので、メモ帳などで編集できます。)
これで、Tera Termを再起動すればOKです。
メタキー(Delete キー, Home キー , End キー, Insert キー) を押すと波ダッシュ(~)が表示されてしまう
[ 現象 ]
[ シェルのコマンドライン ]
[ メタキー(Delete キー, Home キー , End キー, Insert キー) のいずれかを押すと、波ダッシュ(~)が表示 ]
[ メタキー(Delete キー, Home キー , End キー, Insert キー) のいずれかを押すと、変な文字列がが表示 ]
[ 対処 ]
SSH,Telnetのクライアントソフトの確認
これは、SSH,Telnetなどによるリモート接続時でも、コンソールからのログイン時でも同じ動作なら、
メタキーのシェルでのキーバインドの設定 からはじめてみましょう。
SSH,Telnetなどによるリモート接続時の場合に問題が発生する場合は、まず、SSH,Telnetのクライアントソフトを確認してみましょう。
以下はTera Termの設定例です。
- 送受信している漢字コードに誤りがないか確認する
メニュー [ 漢字コード ]でキーボードの設定画面を開きます。
漢字コードに誤りがないか確認しましょう。
UTF-8 なのに Shift_JIS , EUC-JP などになっていませんか?
逆にEUC-JPなのに、UTF-8になていませんか?
誤りがあったら、正しい漢字コードへ変更し再度確認してみてください。
サーバー側の漢字コードの設定を確認したい場合は、以下のコマンドで確認することができます。
$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
|
上記の場合、
UTF-8になります。
- 端末タイプに誤りがないか確認する
接続先へ送信する端末種別情報を Tera Term の設定ファイル ( TERATERM.INI : インストール先ディレクトリにある )に持っています。
[Tera Termインストール先ディレクトリ]\TERATERM.INI 内のTermType情報が、変な端末種別になっていないか確認します。
もしわからない場合は、xterm を設定しておきましょう。
( このファイルは、テキストファイルなので、メモ帳などで編集できます。)
これで、Tera Termを再起動します。
サーバーへ接続し、以下のコマンドで端末タイプを確認してみてください。
$ echo $TERM
xterm
|
ここで、先にTeara Term側で設定(編集)した端末タイプと同じであることを確認します。
もし、先にTeara Term側で設定(編集)した端末タイプと異なる場合は、各シェルの設定に誤りがある可能性があります。
メタキーのシェルでのキーバインドの設定
最後は、メタキーのシェルでのキーバインドの設定です。
各シェル(Bシェル , Cシェルなど)でメタキーに対して動作を設定するキーバインドの機能があります。
このキーバインドの設定に誤りがあるか、メタキーの設定が全くないかのいずれかでしょう。
以下は、Bシェル , Cシェルについての設定例です。
Bシェル ( .inputrc ) の設定例
"\e[1~": beginning-of-line
"\e[2~": overwrite-mode
"\e[3~": delete-char
"\e[4~": end-of-line
|
Cシェル ( .cshrc ) の設定例
if ($term == "xterm" || $term == "vt100" \
|| $term == "vt102" || $term !~ "con*") then
# bind keypad keys for console, vt100, vt102, xterm
bindkey "\e[1~" beginning-of-line # Home
bindkey "\e[2~" overwrite-mode # Ins
bindkey "\e[3~" delete-char # Delete
bindkey "\e[4~" end-of-line # End
endif
|
いずれも各ファイルに上記の内容を追記して、再ログインして確認してみましょう。
SSHクライアントから、メタキーがどんなコードで送信されているか確認するには、以下のコマンドで確認することができます。
Bシェル の場合
$ read
^[[2~^[[3~^[[1~^[[4~
|
readコマンド発行し、Insert キー, Delete キー, Home キー ,End キー の順番で押下し、最後にEnterで終了です。
Cシェル の場合
$ echo $<
^[[2~^[[3~^[[1~^[[4~
|
echo $<コマンド発行し、Insert キー, Delete キー, Home キー ,End キー の順番で押下し、最後にEnterで終了です。
^[ : エスケープ文字になります。
上記の各シェルの設定文字列の
\e に相当します。
(おまけ) viでBackSpace を押すと変な動作をして文字を消せない
[ 現象 ]
vi で編集中のBackSpace を押しても文字を消せないという現象です。
[ 対処 ]
各ユーザの.vimrcに以下の1行を追加することで解消できます。
$ vi ~/.vimrc
...
set backspace=indent,eol,start
|
保存して、再度、viを起動して確認してみましょう。
indent : オートインデントの空白文字を削除できる。
eol : 改行も削除できる。改行削除時は、前行の最後尾へ連結される。
start : Ctrl+uやCtrl+wで入力した文字以外(最初から行にある文字)も削除できる。
メターキー(Delete キー, Home キー , End キー, Insert キー)の動作が変だと、ちょっと、いらいらしちゃいませんか?
個人的には、かなりいらいらしちゃいます。
サーバーの設定は、CUIでもっぱらやりますから、まずマウス操作はないですし、重要なキー操作が思うように動かないのは、やっぱり困りますね。
ここでもポイントは、やっぱり各シェルのキーバインドです。
これをやると、自分でキーのカスタマイズができますから、大変楽になることがあります。また、環境をファイルとして管理できるのも楽ですよね。
別のサーバーへもファイルをコピーするだけで同じ環境を得ることができます。
まだ、シェルのキーバインドをやったことがない方は、一度、お試しあれ。
コメントを投稿 :