일반 모드에서 j, CTRL-J, <NL> 및 CTRL-N의 차이점은 무엇입니까?


12

나는 웹에서 누군가가 사용하는 것을 보았고이 Ctrl-J매핑을 알지 못했기 때문에 관련 문서를 살펴보고 다음을 발견했습니다.

j           or
<Down>      or
CTRL-J      or
<NL>        or
CTRL-N          [count] lines downward linewise.

몇 가지 질문으로 이어집니다.

  • 무엇입니까<NL> : 기본적으로 <CR>누르면 Enter일반 모드에서 한 줄 아래로 내려 가기 때문에 동등한 것으로 간주 하지만 왜 <NL>여기에 있지 <CR>않습니까?
  • 이러한 매핑의 차이점은 무엇입니까? 이 5 가지 옵션 모두가 같은 방식으로 한 줄 아래로 내려 갑니까? 내 테스트에 따르면 예라고 대답하지만 다음 질문으로 이어질 것입니다.
  • 왜 똑같은 할 5 매핑이 있습니다 : 나는 그것을 이해할 수 j<down>정력 매핑에 사용하지 않는 사용자를 위해 유지됩니다,하지만 다른 매핑은 왜 존재 하는가?
  • 다른 것보다 하나 이상을 사용하는 것이 더 흥미로운 경우는 : 그것은 이전 질문의 연속입니다. 가능성이 너무 많으면 다른 장점이 있거나 특정 사용 사례에서 사용하는 것이 더 좋습니다. 그 사용 사례는 무엇입니까?

내가 볼 때 이러한 명령의 중복은 더 이상 찾아 :h k가서 단지 3 가지 방법이있다 : k, <UP>ctrl-p. 보너스 질문은 : 왜 내려가는 5 가지 방법과 올라가는 3 가지 방법이 있습니까?


기본 Ctrl-J바인딩 을 사용하고 있습니까? 적어도 내가 아는 사람들 중 Ctrl-J/K"시작 줄과 동일한 들여 쓰기 수준을 가진 다음 줄까지 아래로 / 아래로" 매핑하는 것이 일반적 입니다.
Aaron Dufour

4
"왜 내려갈 수있는 5 가지 방법과 올라갈 수있는 3 가지 방법이 있습니까?"에 대답하고 싶습니다. 글쎄-인생에서 일 더 쉬워 지기 때문입니다 ! :)
VanLaser 2009 년

@ VanLaser는 정말 훌륭한 대답입니다. 문서 에이 힌트를 추가하는 것을 고려해야합니다! ;-)
statox

@VanLaser 너무 나쁘지 않습니다. 그 속도로 모든 인류는 순식간에 아무것도 아닌 것으로 내려갑니다!
xji

"희망을 버려라, <CR>여기있는 모든 사람들 "
VanLaser

답변:


16

당신이 언급 한 흥미로운 <CR>. <CR>또는 기술적으로 줄의 시작으로 이동하는 데 사용되는 캐리지 리턴 . <NL>개행 또는 일명 줄 바꿈 (보통 LF) 은 다음 줄로 이동 하는 것을 의미했습니다 . 시간이 지남에 따라 대부분의 응용 프로그램에서 구별이 사라졌습니다. 1 누르면 Enter캐리지 리턴이 실제로 산출, 보통 (눌러보십시오 CtrlVEnter- 당신이 볼 수 ^M유닉스 터미널에서). <NL>의 제어 코드는 CtrlJ입니다.

CtrlN나를 놀라게하다. 2 에 따르면 , 그것은 SO 문자입니다.man ascii

Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
────────────────────────────────────────────────────────────────────────
016   14    0E    SO  (shift out)             116   78    4E    N

의 변화변화 밖으로 에 따라 문자, 위키 백과 :

... 전자 기계식 타자기 또는 전신 프린터에서 일반적으로 빨간색과 검은 색으로 세로 방향으로 빨간색과 검은 색으로 다른 색상으로 위아래로 분할 된 명명법, 컬러 리본을 이동하는 방법을 제공했습니다 ...

그것이 어떻게 내려가는 의미 가 나에게 미스터리입니다.


내려가는 5 가지 방법과 올라가는 3 가지의 이유는 무엇입니까?

올라가는 세 가지 방법은 모두 내려갈 수있는 방법입니다. ( CtrlP아마도의 보완은 CtrlN, 여기 에서 시프트 인 / 아웃 은 관련이 없음을 암시합니다 ). 여분의 두 가지 방법 ( <NL>또는 CtrlJ)은 실제로 동일한 방식의 두 가지 표현입니다. <NL>타자기 시절의 유산이며 그 당시에는 올라갈 열쇠가 없다고 생각합니다.

또한보십시오:

1 여전히 일부 경우에 중요합니다 ( 대부분의 형식화 된 인쇄 기능 / 도구를 사용하는 인쇄 \r(캐리지 리턴) 및 \n(줄 바꿈)은 여전히 ​​오래된 의미를 유지합니다).

2 이 표는 알파벳이 같은 줄에있는 문자의 제어 코드에 해당하는 방식으로 배열됩니다.


3
난 항상 생각 Ctrl-N을 위해이었다 다음 , 및 Ctrl-P위해이었다 이전 . 그들은 이맥스에 대한 서 무슨의은, 어쨌든, 여기서 그들은에 바인딩 next-line하고 previous-line. 또한, 이동Ctrl-P 하지 않습니다 ; 그것은이다 데이터 링크 이스케이프 . 이동은 입니다 . Ctrl-O
Lithis

@Lithis 나는 정정했다.
muru

2
@Lithis 솔직히, 내가 Emacs에 대해 아는 유일한 것은 cx ce입니다.
muru

역사적이고 명확한 답변, 많은 Muru 감사합니다! 나는 대답이 종종있는 문자의 ASCII 코드를 생각해야했습니다.
statox

@muru Emacs가 실제로 제공 할 것이 많기 때문에 특히 나쁘다. 특히 나에게 큰 도움을 준 조직 모드. Spacemacs github.com/syl20bnr/spacemacs 프로젝트를 확인하는 것이 좋습니다.이 프로젝트 는 Vim 에뮬레이션에 중점을 두어 전통적인 Emacs 명령을 사용할 필요가 없습니다. 어쩌면 그것은 당신의 인식을 조금 바꿀 것입니다.
xji

8

참조하십시오 :help key-notation.

  1. <NL>"줄 바꿈"을 <CR>의미하고 "캐리지 리턴"을 의미합니다.

    이것들은 현재 줄을 끊는 두 가지 방법입니다. 역사적으로 다른 제어 문자 ( ctrl-jctrl-m)에 바인드 되지만 일반적으로 동일한 키 ()로 삽입됩니다 <CR>. 나는 <NL>이런 맥락에서 사용 하는 것이 반 직관적 인 것처럼 보인다는 데 동의합니다 .

  2. 이러한 "매핑"(실제로 매핑은 아님)은 정확히 같은 방식으로 작동합니다.

  3. 역사는 주로 크로스 플랫폼 제약도 있습니다.

    빌 조이의 터미널에는 전용 모션 키가 없었지만 화살표 데칼은 hjkl키 위에있었습니다 . 당시 모달 편집기는 드물었으므로 해당 키를 누르면 연결된 문자 만 삽입했습니다. 당신은 눌러했다 <C-h>, <C-j>, <C-k>그리고 <C-l>화면에 커서를 이동합니다.

    당신이 볼 수 있듯이,이 상당히 겹치는 사이의 j, <C-j>, <NL><Down>. <C-n>Vim에서 일반적으로 "다음"을 의미하는 것은 동지들과 어떻게 통합되어 있는지 쉽게 알 수 있습니다.

  4. 그것들은 모두 동의어이기 때문에 가장 적합한 것을 자유롭게 사용할 수 있습니다.

    <CR>예를 들어, 자신의 매핑에 사용할 흥미로운 키입니다.


깨달음에 감사드립니다! 나는 <CR>매핑 에 크게 동의 합니다. 또한 한 가지 더 질문입니다. "키 조합"이 실제로 매핑이라고하는 것은 아니지만 어떻게 호출해야하는지 잘 모르겠습니다.
statox

흥미로운 질문입니다. "명령"이라고 부르는 경향이 있습니다.
romainl

제가 틀릴 수도 있지만 모드 명령이 좋아하는 예를 참조하여 "명령은"아니다 :ls, :substitute, new, 등 ...?
statox

x"명령"이기도합니다.
romainl

사실 난 그냥 그 문서를 호출 보았다 x, dd, c, 등의 "명령"을. 당신이 바로해야합니다 그래서, 그 추측 j또는 ^J도 명령입니다.
statox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.