コマンドを実行したい。
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回のキーを押すだけで必要なだけゼロを挿入できることに注意する必要があります。 :-)