Vim에서 remap
, noremap
, nnoremap
및 vnoremap
매핑 명령의 차이점은 무엇입니까?
질문자 :Chetan
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" 의사 모드라고 함)
" 재귀적 " 은 매핑이 결과로 확장된 다음 결과가 다른 결과로 확장되는 식임을 의미합니다.
다음 중 하나에 해당하면 확장이 중지됩니다.
- 결과는 더 이상 다른 것에 매핑되지 않습니다.
- 비재귀적 매핑이 적용되었습니다(즉, "noremap"[또는 해당 ilk 중 하나]가 최종 확장임).
그 시점에서 Vim의 최종 결과의 기본 "의미"가 적용/실행됩니다.
" 비재귀적 "은 매핑이 한 번만 확장되고 그 결과가 적용/실행됨을 의미합니다.
예시:
nmap KH nnoremap HG nnoremap G gg
상기 원인 K
로 확장 H
하고 H
로 확장 G
중지. 즉시 확장되고 중지되는 nnoremap
인해 중지됩니다. G
의 의미가 실행됩니다(즉, "마지막 줄로 이동"). 기껏해야 하나의 비재귀적 매핑이 확장 체인에 적용됩니다(마지막 확장이 될 것입니다).
의 매핑 G
에 gg
누를 경우에만 적용 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
'etc. > StackOverFlow' 카테고리의 다른 글
JavaScriptSerializer - 열거형을 문자열로 JSON 직렬화 (0) | 2023.04.28 |
---|---|
출력을 파일 및 표준 출력으로 리디렉션하는 방법 (0) | 2023.04.28 |
목록 이해에서 if/else (0) | 2023.04.28 |
jQuery 드롭다운에서 선택한 옵션 가져오기 (0) | 2023.04.28 |
개체 유형의 이름을 가져옵니다. (0) | 2023.04.28 |