明らかな不正行為:

明らかな不正行為:

コマンドを実行したい。

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+Yzshbash

これらすべてはまた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個までバインドできます。任意のウィジェットを定義できれば可能性は無関心です。0F1F60

おそらくキーを押し続けると、01回のキーを押すだけで必要なだけゼロを挿入できることに注意する必要があります。 :-)

おすすめ記事