줄 편집 모드에서 less
왼쪽 및 오른쪽 화살표 키는 커서를 앞뒤로 이동합니다. 약속대로 단어별로 탐색하기 위해 컨트롤 키와 함께 사용하고 싶습니다 man less
.
^LEFTARROW [ ESC-b or ESC-LEFTARROW ]
(That is, CONTROL and LEFTARROW simultaneously.) Move the cursor one word to the left.
^RIGHTARROW [ ESC-w or ESC-RIGHTARROW ]
(That is, CONTROL and RIGHTARROW simultaneously.) Move the cursor one word to the right.
불행히도 이것은 내 터미널에서 작동하지 않는 것 같습니다. (Fedora 28의 Tilix 1.8.3, VTE 0.52, GTK 3.22.30). 대신 Control-왼쪽을 누르면 내가 인식할 수 없는 내용이 인쇄됩니다. 아래 예에서는 입력 alpha beta
하고 즉시 Ctrl-왼쪽을 누릅니다. 이 ESC[1;5D
줄에 추가됩니다 .
여기에 구성 오류가 있습니까? 다른 응용 프로그램(예 vim
: Control-Left 및 Control-Right)에서는 예상대로 단어별로 탐색합니다.
앞으로,Ctrl + 왼쪽/오른쪽 화살표 키 문제, 관련성이 있을 수 있음방향키 입력less
답변1
시도 Alt+w
하고Alt+b
승정방향 검색에 사용됩니다.두번째거꾸로 사용됩니다.
답변2
OS/2를 사용하지 않기 때문에
나는 진지했다.
OS/2 입력 처리 코드는 다음과 같습니다.less
⎈ Control+ ←및 ⎈ Control+ →코드를 내부 SK_CTL_LEFT_ARROW
및 이벤트에 매핑하는 "특수 키"가 있습니다 SK_CTL_RIGHT_ARROW
.
Unix 코드에 상응하는 매핑은 없습니다. 이는 악명 높은 결함이 있는 termcap에 의존합니다.
doco의 대괄호 안의 내용은 맞는 내용이고, 괄호 안의 내용은 잘못된 내용입니다. 누군가가 더 잘할 때까지 , ⎋ Escape B, ⎋ Escape F( ⎋ Escape ←sic!) 및 (sic!) 시퀀스(코드가 아님)를 사용해야 합니다 . 보고서를 제출해 주세요.⎋ Escape →less
(일부 터미널 에뮬레이터에서는 수정자 키에 ⎋ Escapean 접두사가 붙도록 구성할 수 있습니다. 이는 모든 터미널 에뮬레이터 및 터미널, 특히 여기에서 입력 제어 시퀀스가 에뮬레이션되는 터미널(반대로 CSI 시퀀스)에 적용되는 것은 아닙니다. 중요한 것은 less
터미널 자체에서 받은 ␛
첫 번째 문자 에는 less
그러한 수식어에 대한 개념이 없다는 것입니다.)
추가 읽기
- https://unix.stackexchange.com/a/444270/5132
- https://unix.stackexchange.com/a/465308/5132
- "오류를 발견하면 어떻게 되나요
less
?".less
자주하는 질문. 그린우드 소프트웨어.
답변3
less
는용어 모자termcap 인터페이스를 사용하는 애플리케이션은 주어진 터미널에 대해 "알고 있는" 모든 정보를 얻습니다. ~하지 않는 한개발자는 일부를 소개했습니다.하드코딩된행동(내가 언급하지 않을 아주 소수의 프로그램에서 행해지는 것과 같은),less
이러한 키 조합은 표준 기능이 아니기 때문에 지원되지 않습니다(예를 들어 참조). 용어 모자ncurses'에 나열된 기능 열용어 정보(5)) 그리고 아니요2- 할당된 역할의 이름(참조터미널 데이터베이스확장에 대한 요약).
그건 그렇고, 심판내 대답간략히 살펴보세요.소스 코드, 왼쪽/오른쪽에 해당하는 항목이 표시되지 않습니다.단어Shift(왼쪽/오른쪽 Shift의 의도된 의미가 아닌 경우)A_LSHIFT
그리고A_RSHIFT
). 자식 비난이 내용과 "word"에 대한 매뉴얼 페이지 설명은 2007년(버전 394)까지 거슬러 올라갑니다. 2016년 기준으로는 더욱 유망해 보입니다.
SK(SK_CTL_RIGHT_ARROW),0, A_RRSHIFT,
SK(SK_CTL_LEFT_ARROW),0, A_LLSHIFT
하지만 체크인 댓글에는 이렇게 나와있어요
commit e5c195113d1666ac506ea3f65545d436d96fe099
Author: Mark Nudelman <[email protected]>
Date: Sat Oct 22 15:25:44 2016 +0000
New commands ESC-{ and ESC-} to shift to start/end of displayed lines.
코드를 읽으십시오(command.c) 편입의 경우 다음과 같은 결론과 다를 바가 없습니다.less
스크롤하다목록(단일 문자) 대신성격, 그러나 OP의 의견은 다음을 지적합니다.
ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
SK(SK_CTL_LEFT_ARROW),0, EC_W_LEFT, /* CTRL-LEFTARROW */
ESC,'w',0, EC_W_RIGHT, /* ESC w */
ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
SK(SK_CTL_RIGHT_ARROW),0, EC_W_RIGHT, /* CTRL-RIGHTARROW */
사용하는space"단어" 구분 기호로 사용됩니다. 아마도 개발자가 이러한 변경을 했을 때 그는 두 가지를 모두 할 수 있는 vi를 모방하려고 생각했을 것입니다(비록 vi는성격다양한 방식으로 나누어집니다.)
*Escapeleft-arrow제안 사항 등을 제공하려면 표의 다음 행을 사용하세요.
ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
그러나 현재 프로그램에는 어떤 내용도 포함되어 있지 않습니다.작업해당 SK_CTL_RIGHT_ARROW
또는 SK_CTL_LEFT_ARROW
기호를 사용하십시오. 이 것입니다몇 가지 키, 예를 들어 이사례 진술(또는 적어도 근처 어딘가):
switch (*++p)
{
case 'u': ch = SK_UP_ARROW; break;
case 'd': ch = SK_DOWN_ARROW; break;
case 'r': ch = SK_RIGHT_ARROW; break;
case 'l': ch = SK_LEFT_ARROW; break;
case 'U': ch = SK_PAGE_UP; break;
case 'D': ch = SK_PAGE_DOWN; break;
case 'h': ch = SK_HOME; break;
case 'e': ch = SK_END; break;
case 'x': ch = SK_DELETE; break;
default:
error("illegal char after \\k", NULL_PARG);
*pp = p+1;
return ("");
}
코드에 할당이 없으면 하드코딩된 것일 뿐 구성할 수 없습니다.
MSDOS/OS/2 구성은 (하드코드된) 테이블을 가지고 있다는 점에서 Unix 구성과 다릅니다.키 코드:
#if MSDOS_COMPILER || OS2
static char k_right[] = { '\340', PCK_RIGHT, 0 };
static char k_left[] = { '\340', PCK_LEFT, 0 };
static char k_ctl_right[] = { '\340', PCK_CTL_RIGHT, 0 };
static char k_ctl_left[] = { '\340', PCK_CTL_LEFT, 0 };
그리고 규정된사례 진술:
#if MSDOS_COMPILER || OS2
case SK_INSERT:
s = k_insert;
break;
case SK_CTL_LEFT_ARROW:
s = k_ctl_left;
break;
case SK_CTL_RIGHT_ARROW:
s = k_ctl_right;
break;
(참고: 아직 할당되지 않았으므로 이러한 경우는 사용되지 않습니다.) 반면 termcap 구성에서는 이러한 기호가 전혀 사용되지 않습니다. (termcap은 자신이 사용할 수 있는 2문자 니모닉을 만드는 데 어려움을 겪고 이러한 상황을 구현하기 위해 약간의 수정을 가하면 원하는 대로 작동한다는 의미에서 "확장 가능"합니다.)
lesskey를 다시 방문하세요.매뉴얼 페이지, 다음과 같이 말합니다.
조치 뒤에는 다음이 포함될 수 있습니다."추가의"끈. less를 실행하는 동안 이러한 명령이 입력되면 작업이 수행되고 추가 문자열은 less 내에 입력된 것처럼 구문 분석됩니다. 이 기능은 특정 상황에서 명령 기능을 확장하는 데 사용될 수 있습니다. 예를 들어"{"그리고":티"다음 예에서는 명령을 사용합니다. 이것 추가의 문자열에는 특별한 의미가 있습니다."사직하다"조치: less가 종료되면 추가 문자열의 첫 번째 문자가 종료 상태로 사용됩니다.
이는 다음과 같은 작업을 수행할 수 있음을 의미합니다.
\e[1;5D noaction \e\e[D
\e[1;5C noaction \e\e[C
매핑됨추가 문자열미리 정의된 단어 이동을 사용합니다.
답변4
나는 마침내 이것을 할 수 있었습니다. (저자에게 연락했더니 less
, 그의 대답은 내가 상황을 필요 이상으로 복잡하게 만들고 있다는 점을 지적했습니다.)
이것이 lesskey
제가 사용한 구성 파일입니다.
#! /usr/bin/env lesskey
#line-edit
\e[1;5D word-left
\e[1;5C word-right
\e[3;5~ word-delete
이 파일에 lesskey를 실행하고 새 인스턴스를 시작 Ctrl-←하고 Ctrl-→(공백으로 구분된?) 단어별로 탐색한 다음 Ctrl-Delete현재 단어의 끝까지 삭제합니다. 이 솔루션의 단점은 터미널 에뮬레이터에서 생성된 특정 이스케이프 시퀀스로 하드코딩되어 있다는 것입니다. 다른 답변에서는 일반적인 "컨트롤 + 화살표 키" 메커니즘이 불가능한 이유를 설명합니다.