etc./StackOverFlow

Vim에서 remap, noremap, nnoremap 및 vnoremap 매핑 명령의 차이점은 무엇입니까?

청렴결백한 만능 재주꾼 2023. 4. 28. 04:05
반응형

질문자 :Chetan


Vim에서 remap , noremap , nnoremapvnoremap 매핑 명령의 차이점은 무엇입니까?



remap 은 매핑이 재귀적으로 작동하도록 하는 옵션입니다. 기본적으로 켜져 있으며 그대로 두는 것이 좋습니다. 나머지는 아래에 설명된 매핑 명령입니다.

:map:noremap 은 다양한 매핑 명령의 재귀비재귀 버전입니다. 예를 들어 다음을 실행하면:

 :map j gg (moves cursor to first line) :map Q j (moves cursor to first line) :noremap W j (moves cursor down one line)

그 다음에:

  • j gg 매핑됩니다.
  • 재귀 매핑을 위해 j 가 확장되기 때문에 Q gg
  • j 는 비재귀 매핑에 대해 확장되지 않으므로 W j 매핑되고 gg 에는 매핑되지 않습니다.

이제 Vim이 모달 편집기 라는 것을 기억하십시오. 일반 모드, 시각 모드 및 기타 모드가 있습니다.

이러한 매핑 세트 각각에 대해 일반, 시각적, 선택 및 연산자 모드( :map:noremap ) 에서 작동하는 매핑 :nmap:nnoremap )과 시각적 모드에서 작동하는 매핑이 있습니다( :vmap:vnoremap ) 등이 있습니다.

이에 대한 자세한 지침은 다음을 참조하십시오.

 :help :map :help :noremap :help recursive_mapping :help :map-modes

DrAl

Vim 문서에서 이러한 명령의 이름 뒤에 숨은 의미를 설명했어야 한다고 생각합니다. 그들이 하는 일을 말하는 것만으로는 이름을 기억하는 데 도움이 되지 않습니다.

map 은 모든 재귀 매핑 명령의 "루트"입니다. 루트 형식은 "일반", "비주얼+선택" 및 "운영자 보류" 모드에 적용됩니다. (저는 언어학 에서와 같이 "루트"라는 용어를 사용하고 있습니다.)

noremap 은 모든 비재귀 매핑 명령의 "루트"입니다. map 과 동일한 모드에 적용됩니다. nore 접두사는 "비재귀적"을 의미한다고 생각하십시오.)

(삽입 및 명령줄에 적용되는 map! 과 같은 !

이 맥락에서 "재귀적"이 의미하는 바는 아래를 참조하십시오.

n 과 같은 모드 문자를 앞에 추가하면 매핑이 작동하는 모드를 수정합니다. 적용 가능한 모드 목록의 하위 집합(예: "비주얼"만)을 선택하거나 map 이 적용되지 않는 다른 모드(예: "삽입")를 선택할 수 있습니다. .

help map-modes 사용하면 매핑이 적용되는 모드를 제어하는 방법을 설명하는 몇 가지 표가 표시됩니다.

모드 문자:

  • n : 정상만
  • v : 시각적 및 선택
  • o : 운영자 보류 중
  • x : 시각적 전용
  • s : 선택만
  • i : 삽입
  • c : 명령줄
  • l : 삽입, 명령줄, regexp-search(및 기타. 집합적으로 "Lang-Arg" 의사 모드라고 함)

" 재귀적 " 은 매핑이 결과로 확장된 다음 결과가 다른 결과로 확장되는 식임을 의미합니다.

다음 중 하나에 해당하면 확장이 중지됩니다.

  1. 결과는 더 이상 다른 것에 매핑되지 않습니다.
  2. 비재귀적 매핑이 적용되었습니다(즉, "noremap"[또는 해당 ilk 중 하나]가 최종 확장임).

그 시점에서 Vim의 최종 결과의 기본 "의미"가 적용/실행됩니다.

" 비재귀적 "은 매핑이 한 번만 확장되고 그 결과가 적용/실행됨을 의미합니다.

예시:

 nmap KH nnoremap HG nnoremap G gg

상기 원인 K 로 확장 H 하고 H 로 확장 G 중지. 즉시 확장되고 중지되는 nnoremap 인해 중지됩니다. G 의 의미가 실행됩니다(즉, "마지막 줄로 이동"). 기껏해야 하나의 비재귀적 매핑이 확장 체인에 적용됩니다(마지막 확장이 될 것입니다).

의 매핑 Ggg 누를 경우에만 적용 G 하지만 누를 경우, K . G 가 재귀적으로 매핑되었는지 여부에 관계없이 K 누르는 데 영향을 미치지 K 의 확장을 멈추게 하는 라인 2이므로 라인 3이 사용되지 않기 때문입니다.


Kelvin

한 가지 차이점은 다음과 같습니다.

  • :map nvo == normal + (visual + select) + operator pending
  • :map! ic == 삽입 + 명령줄 모드

help map-modes 테이블에 명시된 대로.

그래서: map 은 모든 모드에 매핑되지 않습니다.

모든 모드에 매핑하려면 :map:map! .


Ciro Santilli 新疆再教育营六四事件法轮功郝海东

출처 : http:www.stackoverflow.com/questions/3776117/what-is-the-difference-between-the-remap-noremap-nnoremap-and-vnoremap-mapping

반응형