이는 설명이나 문서에 대한 포인터를 요청하는 것입니다.
저는 KornShell93( ksh
Mac OS X 또는 ksh93
다른 곳) 사용자입니다. 나는 대화형 셸로서의 상대적 단순성과 스크립팅 기능 때문에 셸을 좋아하며 2000년에 코드가 더욱 자유로워진 이후로 이 셸을 사용해 왔습니다. vi
편집 모드 에서 vi
및 viraw
옵션이 모두 설정된 상태로 사용합니다.
ksh93
에는 명령줄에 명령을 입력하기 시작한 다음 키를 눌러 Up-arrow명령줄 기록에서 일치하는 최신 명령줄을 가져올 수 있는 깔끔한 기능이 있습니다 . 이에 대한 문서와 편집 모드 [count][A
에서 의 바인딩 방법을 찾을 수 있습니다 vi
. 문제 없습니다.
그러나 빈 프롬프트에서 키를 누르면 Up-arrow가장 최근에 실행된 명령이 먼저 제공되고 이전에 찾았던 명령 접두어가 무엇이든 순환하기 시작합니다. 이것은 나를 끝없이 짜증나게 합니다.
예:
다음 세 가지 명령을 실행합니다.
$ ls -l
$ ls -ld test
$ ls -ld testdir
입력 ls
한 다음 Up-arrow세 번 누르면 반대 순서로 순환됩니다.
나중에 더 많은 명령이 실행되었지만 기록 검색 및 호출이 없습니다 ls
.
$ cc -o testrun mytest.c
$ man strncmp
이제 Up-arrow한 번 누르면 가 표시됩니다 man strncmp
. 다시 누르면 명령 대신 및 그 이전의 이전 명령이 Up-arrow표시됩니다 .ls -ld testdir
ls -ld test
cc -o testrun mytest.c
Up-arrow나는 명령줄에 아무 것도 입력하지 않고 이전에 사용한 접두사를 검색하지 않고 가장 최근 기록을 미리 순환하도록 이 문제를 "수정"하는 방법에 대한 포인터를 찾고 있습니다 . 위의 동작이 문서화된 어딘가에 대한 포인터라도 좋을 것입니다.
편집하다:
설명서 ksh93
에 따르면
[count]k
이전 명령을 가져옵니다. 입력될 때마다k
과거의 이전 명령이 액세스됩니다.
/string
가 포함된 이전 명령에 대한 기록을 뒤로 검색합니다string
. 또는String
로 종료됩니다 . 앞에 가 있으면 일치하는 줄은 로 시작해야 합니다 . null인 경우 이전 항목이 사용됩니다.RETURN
NEW LINE
string
^
string
string
string
[count][A
커서가 줄의 끝에 있으면 현재 줄의 내용으로 설정된/
것과 동일합니다.string
그렇지 않으면 와 동일합니다k
.
이것은~ 아니다내가 왜 그런지 설명해주세요첫 번째man strncmp
(를 누르는 것처럼 k) 및그 다음에ls -ld testdir
위의 예를 들어 보세요 . 매뉴얼의 텍스트를 염두에 두고, 나는 ls -ld testdir
첫 번째 프레스를 시작할 것으로 예상합니다 Up-arrow(그런데 훨씬 더 짜증나는 일이 될 것입니다).
답변1
그것은 문서화 된 행동으로 밝혀졌습니다. ksh93 매뉴얼 페이지에서:
검색 편집 명령 이 명령은 명령 기록에 액세스합니다.
[count]k
이전 명령을 가져옵니다. k가 입력될 때마다 이전 명령에 다시 액세스됩니다.
[count]-
k와 동일합니다.
[count][A
커서가 줄 끝에 있으면 다음과 같습니다./
with 와 동일합니다.끈현재 줄의 내용으로 설정됩니다. 그렇지 않으면 와 동일합니다k
.
[count]j
다음 명령을 가져옵니다. 입력될 때마다j
시간상 다음 명령이 액세스됩니다.
/
끈 다음을 포함하는 이전 명령에 대한 기록을 뒤로 검색합니다.끈. 끈NEW LINE' 으로 종료됩니다RETURN' or
. 만약에끈앞에는 가^
있고 일치하는 줄은 다음으로 시작해야 합니다.끈. 만약에끈null인 경우 이전 문자열이 사용됩니다.
참고: 문자열을 입력한 후 위쪽 화살표를 사용하면 검색 문자열이고정된^
마치 앞에 입력된 것처럼 줄의 시작 부분으로 이동합니다 .
예:
$ ls[Up-Arrow]
은 다음과 같습니다
$ [ESC]/^ls