명령을 실행하고 싶습니다.
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+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개의 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
00
0000
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개네요