명백한 부정행위:

명백한 부정행위:

명령을 실행하고 싶습니다.

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는 내가 원하는 방식으로 작동하지 않습니다. (편집하다:요점은 명령 대체를 사용하지 않고 특정 개수의 0을 입력하고 싶다는 것입니다 $(...))

(*) "효율적"의 기술적 정의는 "O(log n) 키 입력"이라고 생각합니다. 이 정의에 따르면 16의 자릿수(모든 값 16에 대해)에 상수를 더한 값과 같습니다. 효율적입니다.

답변1

노력하다

에코 Alt+1Alt+6Ctrl+V0

16개의 0을 삽입하려면(적어도 미국/영국 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>XX있습니다 <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개의 0에 대해 다음을 입력합니다.

에코 g0F8

(3번의 키 입력) 기본 숫자 는 36 g입니다 16.

이제 우리는 이것을 16개의 0을 삽입하는 키로 더욱 단순화할 수 있습니다. 비록 이것이 부정행위일 수도 있습니다. F22개 0(또는 2개 $STRING, 기본값은 0), F33 0, F1F616 ... 최대 19개까지 바인딩할 수 있습니다 0. 임의의 위젯을 정의할 수 있으면 가능성은 무궁무진합니다.

아마도 키 를 누르고 있으면 0단 한 번의 키 누르기로 원하는 만큼 0을 삽입할 수 있다는 점을 언급해야 할 것 같습니다. :-)

답변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개의 0을 얻으려면 6개의 키가 필요합니다.

키보드 단축키를 변경하지 않고 다음을 수행합니다.

bash에 . 가 있으면 bash C-u kills the currently-being-typed line.
"\C-u":unix-line-discard

그러나 이것이 도움이 될 수도 있습니다.
커서 앞의 내용이 삭제되면 해당 내용도 "킬 링"에 배치됩니다.

따라서 지워진 내용을 ctrl+u지우고 다시 가져오세요. 깨끗한 선에서: " erer it"을 입력하고 뒤로 두 번 당겨서 만듭니다 . (8개의 0)을 얻기 위해 반복하고 , 마지막으로 명령을 입력하고 뒤로 두 번 당깁니다.ctrl+y
000000
00000000

첫 번째 세트(7개 키 유지 ctrl):

00ctrl+Uctrl+Yctrl+Y ctrl+U 

두 번째 그룹(5개)

ctrl+Uctrl+Yctrl+Y ctrl+U 

그러면 지우기 링에 8개의 0이 표시되고 원하는 것을 입력합니다.

foo--bar=bazctrl-Y ctrl-Y 

얻으려면 :

foo --bar=baz 0000000000000000

아이디어를 얻은 후에는 필요한 것을 입력하고 줄의 시작 부분( ctrl-Y)으로 이동한 다음 위와 동일한 절차를 따르고(최대 8개의 0) 끝으로 이동하여( 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개네요

관련 정보