
현재 정의된 키보드 단축키에 대한 개요를 볼 수 있는 사용자 친화적인 방법이 있으면 매우 유용할 것입니다. 즉, 다음 /etc/inputrc
줄이 주어지면
"\e[A": history-search-backward
"\e[11~": backward-word
그리고 ~/.inputrc
라인
"\e[A": kill-word
"\e\eOD": backward-word
재정의된 파일을 확인하기 위해 두 파일을 모두 검토할 필요는 없습니다. \e[A
에 대한 대체 단축키가 두 개 있습니다. backward-word
즉 \e\eOD
, ... 그것이 의미하는 바가 무엇이든 kill-word
실제로는 현재 파일의 끝까지 삭제한다는 의미입니다(또는 다음) 한마디. 이상적인 솔루션은 다음과 같이 인쇄됩니다.
Delete until next word boundary: Meta-A
Go to the previous word boundary: F1; Ctrl-Left
Search history backwards: Meta-Up
(이스케이프 시퀀스를 더 잘 이해하는 사람이 바로가기를 수정할 수 있기를 바랍니다.)
이것을 인쇄할 수 있는 Linux 프로그램이 있습니까?
나는 그러한 프로그램이 OS, 커널 또는 심지어 키보드에 의존적일 수 있다고 추측하고 있으므로 광범위한 구성이 필요할 수 있습니다( 예를 들어 실제로 전송되는 이스케이프 시퀀스를 설정하기 위해 기타 키를 누르 showkey
거나 사용자를 폴링하는 프로그램). xev
), 그러나 터미널 단축키를 효율적으로 사용하는 방법을 마침내 이해하는 데는 허용되는 가격이 될 것입니다.
답변1
짧은 대답은 '아니오'입니다. 그러한 프로그램은 존재하지 않는다고 확신합니다.
원칙적으로 하나를 만들 수 있습니다. readline 구성과 터미널 에뮬레이터를 살펴봐야 합니다(커널과 하드웨어는 관련되지 않음).
bind -P | grep 'can be found'
Bash에는 키 바인딩이 나열되어 있습니다.
abort can be found on "\C-g", "\C-x\C-g", "\e\C-g".
accept-line can be found on "\C-j", "\C-m".
명령에 대해 더 설명적인 이름을 가지려면 bash 또는 readline 문서를 구문 분석해야 합니다.
키 시퀀스와 키 간의 대응은 터미널(일반적으로 터미널 에뮬레이터)에 의해 결정됩니다. 쉽게 구할 수 없는 경우가 많으며, 획득 방법은 전적으로 단말기에 따라 다릅니다.
Emacs에서는 가까이 다가갈 수 있습니다. emacs -q -nw
터미널에서 시작하고 Ctrl+ H, C( describe-key-briefly
명령)을 누른 다음 키 시퀀스( \e
is Escape)를 누르십시오. 이는 재구성된 기능 키(있는 경우)와 해당 키가 Emacs에서 수행하는 작업을 보여줍니다. Readline의 기본 바인딩은 Emacs에서 크게 영감을 받았기 때문에 Emacs의 기능은 readline의 기능과 비슷하지만 항상 그런 것은 아닙니다. 예:
Ctrl+H C ESC [ A
<up> runs the command previous-line
답변2
bind
특히 옵션이 제공될 때 Bash 내장 명령 의 여러 페이지 출력을 소화할 수 없는 동일한 문제가 있었습니다 -p
.
.bashrc
따라서 나는 내 파일 에 정의한 다음 두 가지 함수를 생각해 냈습니다 .
alias def=function
alias val="declare -r"
alias var=declare
alias final="readonly -f"
def keyfunctions {
if (( "$#" )); then
var a
OPTIND=1
getopts ":auI:E:" a
else
var a=E
OPTIND=1
OPTARG='self-insert$|digit-argument$|do-lowercase-version$'
fi
case "$a" in
a)
bind -p |\
sort |\
pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
;;
I)
bind -p |\
grep -E "$OPTARG" |\
sort |\
pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
;;
E)
bind -p |\
grep -Ev '(^$)|^#|'"$OPTARG" |\
sort |\
pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
;;
u|*)
echo >&2 "$FUNCNAME: Usage: $FUNCNAME [-a|-i <eregex>|-e <eregex>]"
echo >&2 "$FUNCNAME: Invoking $FUNCNAME without arguments assumes -E'self-insert$|digit-argument$|do-lowercase-version$'."
val -i b="$((OPTIND-1))"
if [[ "$OPTARG" == : ]]; then
echo >&2 "$FUNCNAME: Error: Invalid argument \"$OPTARG\" at position $b."
elif [[ "$OPTARG" == ? ]]; then
echo >&2 "$FUNCNAME: Error: Invalid option \"$OPTARG\" at position $b."
fi
;;
esac
}
final keyfunctions
def keymacros {
bind -s |\
sort |\
pr -l1 -W"$COLUMNS" -"$(($COLUMNS/40))"
}
final keyfunctions
sort
위의 두 정의를 실행하고 정렬된( ) 출력과 표( pr -t
) 출력이 마음에 드는지 결정하세요 . 열의 수 width
는 고정되어 있으며 열의 수는 의 비율과 관련됩니다 $(($COLUMNS/$width))
.