1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

tcshになれた人がbash,zshを使う際の違和感を緩和する試み

Last updated at Posted at 2021-10-07

動機

物心ついたときからtcshを使い続けて二十余年、キーバインドを頭でなく指が覚えている。そのため、永らく他のシェルに関しては「食わず嫌い」であったが、昨今の軽量化の流れの中でシステムデフォルトでないシェルをインストールするのが憚られる風潮になってきたので、tcsh育ちの者がうける違和感を和らげる設定を試みることにした。似たような記事はいくつか存在するようだが、いずれも断片的な情報が多いので、自分用に情報を順次整理していくことにした。

参考資料

違和感その1: コマンドプロンプト行末のCtrl-Dで補完候補表示

tcshでは、Ctrl-Dは、「行末では補完候補を表示、それ以外では一文字削除」となっている。bashで真っ先に感じる違和感は、行末のCtrl-Dで補完候補が表示されないことであろう。tcshでは行の途中で補完候補を表示するのにEsc,Ctrl-Dを叩くが、bashではこれも動作が違うので違和感が最高潮に達する。

  • bashの場合には、~/.inputrcに下記の記載をして、readlineの変数でキーバインドを設定する模様。
~/.inputrc
# tcsh-like key binding
"\C-d": delete-char-or-list
"\M-\C-d": possible-completions	
"\e\C-d":  possible-completions	
  • zshの場合には、デフォルトでtcshと同じ挙動の模様。なにも足さない。なにも引かない。

違和感その2: Esc-p,Esc-nでのヒストリ補完

tcshでは、コマンドを途中まで打ったところでEsc-pを叩くと、同じ文字列を含むコマンド履歴を辿って表示してくれる。オプション引数がたくさんついた長〜いコマンドを何回も叩く場合に多用する機能だが、bashではキーバインドが違う。

~/.inputrc
# tcsh-like key binding
"\M-p": history-search-backward
"\M-n": history-search-forward
"\ep": history-search-backward
"\en": history-search-forward
  • zshの場合には、デフォルトでtcshと同じ挙動の模様。なにも足さない。なにも引かない。

違和感その3: 補完候補が多い場合に表示するか聞かれる。さらにページ毎に表示。

tcshでは補完候補の表示は非常にシンプルであるが、bash,zshの場合には、補完候補の数が多い場合にDisplay all nnn possibilities? (y or n)などと言ってお伺いをたててくれるが煩わしい。余計なキー入力、タイムラグなく表示して欲しい。

  • bashの場合には、~/.inputrcに下記の2行を追加する。
~/.inputrc
# Disable prompt for long completion list
set completion-query-items -1
set page-completions off
  • zshの場合: 2つある補完機能のうちcompsysを選んで設定する必要があるようだ。(compctlでのやり方は不明). ただし不完全。効果があったりなかったり...orz
~/.zshrc
# Disable prompt for long completion list
zstyle -d ':completion:*' list-prompt 
unset LISTPROMPT
LISTMAX=-1
autoload -Uz compinit
compinit

違和感その4: 文字列のコピー/カット/ペーストのキーバインド

tcshでは、Ctrl-@とともにCtrl-SPACEでマークをつけられる。bashでは、``ESC-wでペーストされない。zsh`の場合には、`Ctrl-w`に単語の消去(`backward-kill-word`)が割り当てられていて、`tcsh`(リージョンの消去)と挙動が違う。

  • bashの場合には、~/.inputrcに下記の3行を追加する。
~/.inputrc
# tcsh-like copy & paste
"\M-w": copy-region-as-kill
"\ew": copy-region-as-kill
"\C-w":  kill-region
  • zshの場合には、~/.zshrcに下記の1行を追加する。
~/.zshrc
# tcsh-like copy & paste
bindkey '^w' kill-region
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?