명령 줄 모드 유형을 <Esc> 및 Ctrl 명령으로 설정


11

아래 단어를 인용하고 싶다고 상상해보십시오. |커서 위치 인 경우 cw""<Esc>P보통 모드에서 단어를 쉽게 인용 할 수 있습니다 .

|below

커맨드 라인 모드에서 동일한 동작을 달성하고 싶습니다. 내 질문은 내가 입력하고 싶은 명령 줄 모드에 어떻게 말할 수 있습니까 <Esc>? 나는 :norm cw""<Esc>P다른 변형을 시도했지만 ""<Esc>P대신에 얻는다 "below".

여전히 이와 관련하여 명령 줄 모드 유형 Ctrl 명령을 만드는 방법을 알고 싶습니다. 예를 들어 위에서 언급 한 단어를 cw"<C-r>""<Esc>대신 인용 할 수 있습니다. 그러나 입력하려면 명령 줄이 필요 <C-r>합니다. 어떻게해야합니까?


1
거기 것처럼 <C-x><C-e>에서 명령 줄을 편집 할 수의 readline에 $EDITOR, 당신은 <C-f>명령 줄 창을 엽니 다 빔에. 참조하십시오 :help cmdline-window.
romainl

답변:


11

<C-v>당신이 찾고있는 것입니다. Esc이스케이프를 사용하면 아무것도 이스케이프하지 않고도 리터럴 문자 (예 : 문자열 "Esc"대신 리터럴)를 입력 할 수 있습니다 .

:norm cw""<C-v><Esc>P

다음과 같이 표시됩니다 :

:norm cw""^[P

그리고 당신이 원하는 것을 할 것입니다 (즉, 단어를 인용하십시오). 다른 <C-?>매핑 과 함께 사용할 수도 있습니다 . 예를 들어 두 번째 요청은 다음과 같습니다.

:norm cw"<C-v><C-r>""

다음과 같이 표시됩니다 :

:norm cw"^R""

그리고 위와 동일하게됩니다. Esc끝에 여분을 포함시킬 필요는 없습니다 .


10

이는 특수 키와 같은 특수 키 <Esc>normal명령에서 변환되지 않고을 누른 것처럼 취급 되기 때문 <Esc>입니다. 이를 해결하기 위해 exec명령을 사용할 수 있습니다 . 이렇게 :

:exec "norm cw\"\"\<Esc>P"

따옴표 앞에와 백 슬래시를 넣어야하며 <Esc>큰 따옴표 대신 작은 따옴표를 사용하면 작동하지 않습니다.


이것은 Ctrl 명령에서도 작동합니까? 명령에 어떻게 작성해야합니까?
Gonçalo Ribeiro

예, 작동합니다. 다음과 같이 작성할 수 있습니다."\<C-{insert key}>"
EvergreenTree

2

명령 줄 모드가 다릅니다. 동일한 일반 명령 편집 명령을 사용할 수 없습니다. 에서 명령 목록을 찾을 수 있습니다 :help c_CTRL-V.

이제 일반 및 명령 줄 모드 를 통해 입력 할 수있는 명령 줄 창 ( :help command-line-window)이 있습니다 . 에서 창에서 모든 일반 명령과 매핑을 사용할 수 있습니다, 그래서 옵션 1이 될 것입니다.q:<C-F>

옵션 2는 명령 행 모드에 대한 특수 맵핑입니다. 내가 말했듯이 :normalet al.을 통해 접근 방식을 사용할 수 없습니다 . 이를 정의하는 핵심은 :help c_CTRL-\_e"전체 명령 행을 결과로 평가하고 {expr} 및 대체" 하는 맵핑입니다. 다음은 명령 행 끝에서만 올바르게 작동하는 간단한 예입니다.

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
OP가 명령 줄에 대한 매핑을 만드는 것이 아니라 명령 줄에서 매핑을 실행한다고 생각합니다.
EvergreenTree
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.