현재 정의된 키보드 단축키를 사용자 친화적으로 설명할 수 있는 방법이 있다면 매우 도움이 될 것입니다. 즉, 다음 /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 -q -nw
Emacs에서도 비슷한 작업을 수행할 수 있습니다. 터미널에서 실행하고 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( sort
) 및 list( pr -t
) 출력이 마음에 드는지 결정하세요. 열 개수는 width
고정되어 있으며, 열 개수는 의 비율에 따라 달라집니다 $(($COLUMNS/$width))
.