シェル(少なくとも私が知っていること)には、本当に悪いコマンド編集機能があります。
例えば:
- コマンドのどのポイントにもカーソルを合わせることができません。
- コマンド内のテキストを選択してバックスペース/削除/置換することはできません。
現在、これらは非常に注意をそらします。端末に貼り付ける前に、geditを使用してコマンドを編集します。
これらに適したソリューションはありますか?
シェル(少なくとも私が知っていること)には、本当に悪いコマンド編集機能があります。
例えば:
現在、これらは非常に注意をそらします。端末に貼り付ける前に、geditを使用してコマンドを編集します。
これらに適したソリューションはありますか?
回答:
Bashは実際にはこれが非常に得意です。そのショートカットを学ぶ必要があります。例(デフォルトのemacsモードの場合):
そして、もっとたくさんあります。man readline
他に何が利用できるかを読むために読んでください。に異なるショートカットを配置できます~/.inputrc
。例えば、作るためにCtrl+ Left1つの単語を移動して、Ctrl+ Rightあなたにこれを追加し、前方の1つの単語を行きます~/.inputrc
:
"\e[1;5D": backward-word
"\e[1;5C": forward-word
これらの奇妙なコードの意味を調べるには、Ctrl+ Vを押してから、使用するキーを押します。あなたがしようとした場合Ctrl+ Right、あなたが表示されます^[[1;5C
。交換する^[
と\e
の中で~/.inputrc
。
他のシェルを調べることもできます。人気のある「モダン」で機能豊富なシェルには次のものがあります。
gnome-terminal
、あなたは使用する必要がESC
代わりにボタンをALT
前後にナビゲート1ワードに。。..または、アプリケーションメニューにAltを使用しない端末に切り替えます。。。xtermやsakuraのような
選択EDITOR
したエディターに設定し、現在編集中の行を開くCTRL+ X+ EまたはCTRL+ X/ CTRL+を押すことにより、空または部分的に入力したコマンドを選択したエディターに編集できます。EEDITOR
たとえば、に設定EDITOR
するgedit
と、CTRL+ X+ EおよびCTRL+ X/ CTRL+ EがGeditの現在の行を開きます。
この恒久的な解決策を作成するには、設定することができますEDITOR
の中で~/.bashrc
。
これにより、完全に機能するグラフィカルテキストエディターを使用してコマンドを編集できます。編集したコマンドを実行するには、単にドキュメントを保存して閉じます。
以下を追加することにより、同じ機能をZshで有効にできます~/.zshrc
。
autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line
fc
、FCEDIT変数が設定されている場合、コマンドで呼び出すこともできます。いい答えです !
fc
、前のコマンドを開きます(特定の点でもっときれいです)。知りませんでした、ありがとう!
端末にはテキスト編集機能はありません。端末はテキスト領域を提供し、キーボードを何かに接続します。しかし、何かあなたは、端末内で実行することは、それが何ができるかを決定します。
などのシェルbash
は、通常、端末内で実行することが最初に見つかるものです。シェルはコマンドに基づいて機能するため、現在のコマンドのみを編集できます。 bashは優れた提供して編集がコマンドを Bourneシェルと比べたりcsh
またはksh
まだそれはほとんどあなたもショートストーリーで編集したいと思う何かではありません。
テキストエディターは、シェルで呼び出すことができるコマンドの1つです。主な例はvimとemacsです。 vim
またはemacs
、ほとんど何でも編集できるようになります。どちらにも、直面している問題に機能を拡張するための組み込みプログラミング環境が含まれています。
したがって、解決策は、これらのツールが何をしているのかをよりよく理解し、何をするつもりで、仕事に合ったものを選ぶことです。
通常、端末ではマウスでテキストを選択できますが、シェルはこれを認識しません。だから、残念ながらどちらもbash
、zsh
、fish
もes
マウスベースの編集をサポートすることができます。そうするためには、彼らはターミナルをより強く管理する必要があるでしょう。
ただし、VimまたはGVimを開いてから、次のコマンドを使用してシェルコマンドを入力する場合(これは少しストレッチです):
:!...
次に、マウスをクリックして行の任意の場所にジャンプできます。(:set mouse=a
まだ有効になっていない場合は、最初に行う必要があります。)このモードの編集キーは、:help cmdline-editing
Vimには非常に強力なコマンド履歴モードもあり、を押すとアクセスできますq:。そこから、Vimの通常モードコマンドを使用して、ヤンク、削除、および貼り付けを行うことができます。このモードでは、マウスで選択してから、(を押すことでd)必要な機能を削除できます。
ここで重要な注意点は、Vimが実際にライブシェルセッションを実行し続けないことです。実行する各コマンドは、子プロセスで実行されます。そのため、子プロセスによって環境変数またはシェルオプションに加えられた変更は失われます。
とはいえ、Vimプロセス内から環境変数を変更し、Vimのコマンドラインからこれらを使用すると、子プロセスにエクスポートすることもできます。
:let $FOO="bar" " the $ and the quotes are mandatory here
:echo $FOO " Vim's own echo command
bar
:!echo "$FOO" " Passing the variable to a shell command
bar
:!bash " Opening a child shell
$ echo "$FOO"
bar
したがって、Vimが実際にはある種の奇妙なシェルであるかのように振る舞う場合は、その高度な編集機能をお楽しみください!おそらく最大の欠点は、次のいずれ:!
かを入力してすべてのコマンドを開始する必要があることですq:
ところで、シェルコマンドの出力を現在のVimバッファーに取得する場合は、次のようにできます(ただし、現在の行が上書きされることに注意してください)。
:,!ls