명령 줄 모드 유형을 <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.