コマンドを実行したい。
foo --bar=baz <16 zeroes>
16個の0 *を効率的に入力する方法は?Alt長押しすると、次の1 6 0操作が160回繰り返されますが、これは私が望むものではありません。 EmacsではAlt-[number]orを使用できますが、Ctrl-u 1 6 Ctrl-u 0bashではCtrl-u現在入力されている行を終了し、次の0は行に0を追加します。
もし私がするなら
foo --bar=baz $(printf '0%.0s' {1..16})
次に、代わりにhistory
上記の内容を正確に表示しますfoo --bar=baz 0000000000000000
。つまり、bashは私が望む方法で動作しません。 (編集する:要は、コマンド置換を使わずに特定の数のゼロを入力したいということです$(...)
)
(*)「効率的」の技術的定義は「O(log n)キーストローク」だと思います。この定義によれば、16桁(すべての値16に対して)に定数を加えた値と同じです。効率的です。
答え1
努力する
エコAlt+1Alt+6Ctrl+V0
16個のゼロを挿入するには(少なくともアメリカ/イギリスのQWERTYキーボードを使用していると仮定)、6回のキーを押す必要があります(Alt1と6の両方を保持できます)。
vi
標準モード(set -o vi
)を使用して次のように入力することもできます。
エコEsc0x16p
(また6つのキー入力)。
emacs
複数の単一文字()を繰り返すために使用できる対応するパターンは、では有効ですが、では無効です。echo 0Ctrl+WAlt+1Alt+6Ctrl+Y
zsh
bash
これらすべてはまたzsh
(そしてtcsh
それらがどこから来たのか)動作します。を使用すると、zsh
塗りつぶし変数拡張フラグを使用し、次のように拡張することもできますTab。
エコ${(l:16::0:)}Tab
(明らかにもっと多くのキーストロークがあります)。
を使用してを使用して拡張するbash
こともできます。ただし、行のすべての項目を拡張することに注意してください(グローバル変数ではありません)。bash
$(printf '0%.0s' {1..16})
Ctrl+Alt+E
最小限のキーストロークでゲームをプレイするには、繰り返し数に応じてサイズ変更されたキーにウィジェットをバインド<some-number>X
できX
ます<some-number>
。そして<some-number>
36進数をさらに減らしてください。
zsh
(にバインディング)F8:
repeat-string() {
REPLY=
repeat $1 REPLY+=$2
}
expand-repeat() {
emulate -L zsh
set -o rematchpcre
local match mbegin mend MATCH MBEGIN MEND REPLY
if [[ $LBUFFER =~ '^(.*?)([[:alnum:]]+)(.)$' ]]; then
repeat-string $((36#$match[2])) $match[3]
LBUFFER=$match[1]$REPLY
else
return 1
fi
}
zle -N expand-repeat
bindkey "$terminfo[kf8]" expand-repeat
次に、16個のゼロに対して次のように入力します。
エコg0F8
(3回のキー入力)デフォルトの数字は36g
です16
。
これで、これを16個のゼロを挿入するキーでさらに簡素化できます。これは不正行為かもしれません。F22個0
(または2個$STRING
、デフォルトは0)、3、16 F3...最大19個までバインドできます。任意のウィジェットを定義できれば可能性は無関心です。0
F1F60
おそらくキーを押し続けると、01回のキーを押すだけで必要なだけゼロを挿入できることに注意する必要があります。 :-)
答え2
ターミナルエミュレータがキーストローク(タブ切り替えなど)を使用しないと仮定すると、通常のxtermが機能するため、を押すことができますAlt-1 6 Ctrl-V 0。繰り返したい数字と文字を分離するにはControl-Vが必要です(文字を繰り返す場合は必要ありません)。
(これはreadlineという関数なので、関連する修飾キーを変更するためにdigit-argument
使用できます。)bind
答え3
Emacsは通常、C-q数値入力と区切られたプレフィックス引数を使用します。
BashはXON / XOFFフロー制御の問題を回避するためにCtrl+v代わりを使用します。C-q
だからあなたは使用することができますAlt+1 Alt+6 Ctrl+v 0。
答え4
マクロを使用してください:
バインドされたファンクションキーF8に最終的に2が掛けられます。言葉(前のスペース)(発見されたF8キーコードを使用Ctrl-V F8
):
$ bind '"\e[19~": "\C-w\C-y\C-y"'
同じ文字を送ると~/.inputrc
$ echo '"\e[19~": "\C-w\C-y\C-y"' >> ~/.inputrc
次に、次のように入力します。
エコ0F8F8F8F8
2^4乗算0を求めます。 (まだ5回のキー入力)
または、次のように入力してください。
エコブックF8F8F8
この本から2^3の単語を入手してください。
より速く:
4を掛けます:
$ bind '"\e[19~": "\C-w\C-y\C-y\C-w\C-y\C-y"'
エコ0F8F8
キー3つ。
8を掛けます(ファンクションキーと同じ数字)。
$ bind '"\e[19~": "\C-w\C-y\C-y\C-w\C-y\C-y\C-w\C-y\C-y"'
エコ00F8
それでも3つのボタンがあります。
だまされますか?
トリックを書くには16を掛けます。
$ bind '"\e[19~": "\C-w\C-y\C-y\C-w\C-y\C-y\C-w\C-y\C-y\C-w\C-y\C-y"'
エコ0F8
ボタンは2つだけです。 (まだ便利なシンプルな機能)
^^^^^^^^^^^^^^^^^^(36進数?ハ!):-P
明らかな不正行為:
$ bind '"\e[19~": "0000000000000000"'
エコF8
1つだけ(例:一つ) キー入力.
バインディングの変更ctrl+U:
次のアドレスに送信してください~/.inputrc
。
echo '"\C-u": universal-argument >> ~/.inputrc
~/.inputrc
ファイルをもう一度読んでください。
ctrl+Xctrl+R
(必要に応じて)emacsの規則に従ってください。
foo --bar=baz ctrl+U16 ctrl+U0
7キー(「設定」の後)。
やや短い:
「universal-argument」にデフォルトの「4を掛ける」を使用し、次に終了します。
ctrl+V0
foo --bar=baz ctrl+Uctrl+Uctrl+V0
鍵は5つだけです。
alt+n(引数:n)を使用したアクセス
foo --bar=baz Alt+16Ctrl+V0
16個のゼロを取得するには6個のキーが必要です。
キーボードショートカットを変更せずに、次の操作を行います。
bashに 。があればbash C-u kills the currently-being-typed line
。"\C-u":
unix-line-discard
しかし、これが役に立つかもしれません。
カーソルの前の内容が削除されると、その内容も「キリング」に配置されます。
したがって、消去された内容を消去してctrl+u
再度インポートしてください。きれいな線で:「erer it」と入力し、後ろに2回引いて作成します。 (8個の0)を得るために繰り返し、最後にコマンドを入力して後ろに2回引いてください。ctrl+y
00
0000
00000000
最初のセット(7つのキーを保持ctrl):
00ctrl+Uctrl+Yctrl+Y ctrl+U
2番目のグループ(5つ)
ctrl+Uctrl+Yctrl+Y ctrl+U
これにより、クリアリングに8つのゼロが表示され、必要なものを入力します。
foo--bar=bazctrl-Y ctrl-Y
取得するには:
foo --bar=baz 0000000000000000
アイデアを得たら、必要なものを入力して行の先頭(ctrl-Y)に移動し、上記と同じ手順に従い(最大8つの0)最後に移動して(2回)ctrl-E引っ張ることもできます。
foo --bar=baz ctrl-A00ctrl-Uctrl-Yctrl-Y ctrl-Uctrl-Yctrl-Y ctrl-U ctrl-Ectrl-Yctrl-Y
(コマンド自体に加えて)15個のキーがあります。
私も知っている、短くはありませんが、それは利用可能なものにのみ適用されます。
これは少し短いです。
0000 ctrl-U ctrl-Y ctrl-Y ctrl-Y ctrl-YCtrl-A foo --bar=baz
鍵が11個ですね