Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

bash(zsh)上でよく使うカーソル移動などのショートカットを覚えると得する話

$
0
0

きっかけ

最近他人のターミナルの画面を見る機会が多くなりまして、よく矢印キーだけでカーソル移動したりする方が多いなぁと感じたりするので、紹介用にまとめました。

また、これらのショートカットを覚えることで他のlinuxコマンドなどでも通用することも多いので、ぜひ覚えておいても損はないのかなと思います。

bash(zsh)に存在するemacsモードとviモード

bash、zshなどのカーソル移動にはemacsモードとviモードが存在します。
これらのモードはカーソル移動におけるショートカットにおいて主に違いがあります。

大抵の場合bashやzshの場合、デフォルトのemacsモードで事足りるかと思うので、今回はbashについてはemacsモードについてまとめます。(viモードについて気になる方は他の方の紹介しているviモードの記事をどうぞ)

emacsモードのカーソル移動

ショートカット意味
Ctrl + aカーソルを行頭に移動
Ctrl + eカーソルを行末に移動
Alt + →単語ブロック毎に右に移動※1
Alt + ←単語ブロック毎に左に移動※1

※1 日本語に対しても使用できますが、基本的に英語に比べると、単語ブロックの判定の精度は落ちます

emacsモードの文字削除

文字削除も便利なショートカットが存在します

ショートカット意味
Ctrl + hカーソル前の文字を削除
Ctrl + dカーソル下の文字を削除
Ctrl + w単語ブロック毎に削除
Ctrl + uカーソルから行頭まで削除
Ctrl + kカーソルから行末まで削除

ちなみに、terminalでパスワードを入力する場面で打ち間違えたときに、Ctrl + uしたりするとパスワードを最初から打ち直したりできます。

Ctrl + w と Ctrl + h はvi(vim)でも使えます。
Ctrl + hは地味ですが、ホームポジション崩したくない人(vimmerとか)がよく使います[要出典]。

また、bash、zshにおいては行に文字が全く無い場合にはCtrl + dはexitと同じコマンドになります。

次候補、前候補

また、コマンドのヒストリーを遡る際の『候補列挙リストの移動』としての Ctrl+n Ctrl+p も同じです。

ショートカット意味
Ctrl + n前のヒストリーの候補へ
Ctrl + p次のヒストリーの候補へ

この候補列挙のショートカットはvimでも補完の候補の列挙リストの移動などで利用します。

mysqlのCLIでも同様なキー操作が可能

これらのキー操作、CLIのmysql操作でも一部同じショートカットをサポートしています。

ショートカット意味
Ctrl + aカーソルを行頭に移動
Ctrl + eカーソルを行末に移動
Alt + →単語ブロック毎に右に移動
Alt + ←単語ブロック毎に左に移動
Ctrl + hカーソル前の文字を削除
Ctrl + dカーソル後の文字を削除
Ctrl + u行を削除
Ctrl + wカーソルから行頭まで削除
Ctrl + kカーソルから行末まで削除
Ctrl + n前のヒストリーへ
Ctrl + p次のヒストリーへ

Ctrl + w と Ctrl + uが若干惜しい感じですが、概ねサポートしています。

また、CLIのmysqlでもCtrl + dのショートカットによるexitをサポートしています。
ほかにも、bash、zshと同じようにCtrl + rによるヒストリー検索もサポートしてますよね。

これらのemacsっぽいショートカットはmacならデフォルトで利用可能

macはこのemacsモードのterminalのカーソル操作に影響を受けているっぽい(それか、emacs自体に影響を受けているか)ので、macではおおよそ同じショートカットが利用できますので覚えておいてきっと損はありません。

ショートカット意味
Ctrl + aカーソルを行頭に移動
Ctrl + eカーソルを行末に移動
Alt + →単語ブロック毎に右に移動
Alt + ←単語ブロック毎に左に移動
Ctrl + hカーソル前の文字を削除
Ctrl + dカーソル後の文字を削除
Ctrl + kカーソルから行末まで削除
Ctrl + n次の候補へ (※変換中)
Ctrl + p前の候補へ(※変換中)

※Ctrl-uとCtrl-wがダメっぽいです

一部対応していないキーがありますが、概ね対応しているのではないかと思います。
但し、エディタによってはこれらのキーを上書きして別の機能を割り当ててしまっている場合があるのでご注意を…。

viも色々と影響与えてますよ

ここまでemacsのショートカットが多かったですが、viのショートカットをサポートしているものも色々ありますよね。

カーソルの移動ではないですが、man や --helpオプション や git diff で開くときに使われるlessなんかもviライクなショートカットをサポートしてますよね。

ちなみに、自分はこの記事を書くまでlessコマンドで開いてたということに気づいてなかったと言うのは内緒…(viにそういう開くモードが有るもんだとばっかり思ってました…)

ショートカット意味
j1行上に移動
k1行下に移動
d下にページ送り (※viだとノーマルモードでCtrl + d)
u上にページ送り (※viだとノーマルモードでCtrl + u)
gページ先頭へ (※viだとノーマルモードでgg)
Gページ終わりへ (※viだとノーマルモードでG)
/ページ内検索の文字列入力開始
n次のページ内検索結果へ
N次のページ内検索結果へ

なお、lessの場合単にd,uではなくて、Ctrl + d, uでも元のショートカットと同じ挙動になります。
また、gもggも最終的には同じ場所にたどり着くので、vi使いは全く気にせず同じショートカットで使えるようになっていますよね。
qでlessコマンドを終了するのとかもviみたいですよね。

viのショートカット体系のコマンド達

screenのコピーモードもviのようなショートカットコマンドをサポートしています。

ショートカット意味
h左へ
j下へ
k上へ
l右へ
ggバッファ内先頭へ
Gバッファ内末尾へ
Ctrl-u半ページ上に移動
Ctrl-d半ページ下に移動
/検索の文字列入力開始
n次の検索結果へ
N次の検索結果へ

他にもviと同じ動作をするコマンドが幾つかあります(^,$,w,b,eなど)

他にも、個人的にはtigとかよく使ったりしますが、こちらもviライクなコマンドラインをサポートしたりしてます。

たぶん、他にもたくさんあるんだろうなーと思いつつ、思いつき次第書き込む形式で追記していきたいと思います。それかコメントで教えて下さい (←えっ…)

おまけ

webの小ネタ系でviのhjklをショートカットとしてサポートしている場合も多いですが、個人的によく使うのは、

  • Google日本語入力でzh、zj、zk、zlでviの移動方向にあわせて各矢印が出る(←↓↑→)

いろいろなwebサービスでおもむろにhjklと叩くと色々と反応がある場合があって、『あぁ、意識してるんだな』感が感じられます。

まとめ

特にCLI系は新しいものに触れたときでも、vi系やemacs系のショートカットをサポートしているものも多いですので、特にマニュアル読まずに他で使えているショートカットを試してみるだけで意外と使えちゃったりします。
というわけで、ショートカットはemacs系とvi系を少し覚えるだけでも決して損はないかと思いますので頑張って覚えましょう!

それでは皆さん、良いショートカットライフを!

※ この記事では便宜上emacsライク、viライクなショートカットというような表現をしてますが、emacsやviが先に実装したのか、それとも他から影響を受けて、後から実装したのかについては検証しませんのでご了承下さい。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>