Bashシェルで利用できる多くの便利なキーボードショートカットの中には、 Ctrl-W カーソルの左側にある単語を削除します。私のコマンドラインが次のようになっているとしましょう。
cp some-file /foo/bar/baz/copy
今、私は押すことができると期待しています Ctrl-W そして、次のようになります。
cp some-file /foo/bar/baz/
Vimのコマンドラインでは、実際には次のように機能します。英数字のみが「単語」として扱われ、特殊文字(/
など)は新しい「単語」の開始を示す区切り文字として機能します。
しかし残念ながら、これまで使用したすべてのシェルでそのように機能するわけではありません。スペースだけが「単語」を区切るので、上記のコマンドラインでショートカットを押すと次のようになります。
cp some-file
BashをVimのように動作させる方法はありますか? .bashrc
に入れることができるいくつかの構成?
これはVimとは何の関係もありません。すべてのエディターはそのように動作し(emacsを含む)、Word以外の文字を区切り文字として扱います。とにかく、あなたが話している振る舞いはreadline
によって制御され、そのマニュアルにはショートカットを割り当てることができるかなりの数のコマンドがリストされています。ここにいくつかの関連するものを貼り付けていますが、詳細についてはman readline
を読むことをお勧めします。
backward-Word (M-b)
Move back to the start of the current or previous Word. Words
are composed of alphanumeric characters (letters and digits).
kill-line (C-k)
Kill the text from point to the end of the line.
kill-Word (M-d)
Kill from point the end of the current Word, or if between
words, to the end of the next Word. Word boundaries are the
same as those used by forward-Word.
backward-kill-Word (M-Rubout)
Kill the Word behind point. Word boundaries are the same as
those used by backward-Word.
unix-Word-rubout (C-w)
Kill the Word behind point, using white space as a Word bound‐
ary. The killed text is saved on the kill-ring.
unix-filename-rubout
Kill the Word behind point, using white space and the slash
character as the Word boundaries. The killed text is saved on
the kill-ring.
したがって、必要なのはbackward-kill-Word
で、これは英数字以外の文字を単語の境界として使用します。デフォルトでは、 Alt+Backspace ただし、すべてのユーザーに適用する場合はグローバル/etc/inputrc
を使用するか、(より適切には)独自のローカル$HOME/.inputrc
を使用して変更できます。
私の知る限り、 Ctrl+W 予約されているようで、それを使用することはできませんが、別のショートカットを選択できます。 Ctrl+J 例えば。 $HOME/.inputrc
ファイルが存在しない場合は作成し、次の行を追加します。
Control-J: backward-kill-Word
最近のほとんどのターミナルエミュレータでは、これで十分です。ただし、一部の古い端末は異なるコードを使用します。たとえば、xterm
を使用している場合、上記の行は次のように記述する必要があります。
C-J: backward-kill-Word
次の行を~/.inputrc
に入れて新しいシェルを開始することにより、いわゆる「viモード」のreadline(したがってbash)を有効にできます。
set editing-mode vi
set keymap vi-command
しかし、<C-w>
はデフォルトのEmacsモードと同じように機能することに気付くでしょう。単語はスペースで区切られています。ただし、dT/
または同様のコマンドを実行できます。それはまだエミュレーションであり、実際の取引ではありません。利用可能なマッピングは、readlineのマニュアルにリストされています。
$ man readline
/VI
Vim wikiのこのページ も参照してください。
しかし、コマンドラインを真剣に編集する必要がある場合は、readlineのviモードはそれほど便利ではないと思います...実際にVimを使用してみませんか?
<C-x><C-e>
私が知っている2つのオプションがありますが、どちらもあなたが求めることを直接行いません。
set -o vi
。参照: BASHヘルプ-Bashチュートリアル