我在网络上的某个地方看到有人在使用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>保留给以下用户:不用于vim映射,但是为什么其他映射存在?

什么时候比另一种更有趣:这是上一个问题的延续:如果有太多可能性,我猜想它们有不同的优势或在特定情况下更适合使用用例。这些用例是什么?

当我看:h k时,发现这些命令的冗余更加奇怪:只有3种上升方式:k<UP>ctrl-p。因此,奖金问题是:为什么有5种下降的方式而只有3种上升的方式?

评论

您确定他们使用的是默认的Ctrl-J绑定吗?至少在我所知的范围内,将Ctrl-J / K映射到“向下/向上直到下一行与起始行具有相同缩进级别”似乎是很常见的。

我想回答“为什么有5种下降的方式而只有3种上升的方式?”好吧-这是因为,在生活中,事情往南走就容易了! :)

@VanLaser确实是一个很好的答案,他们应该考虑在文档中添加此提示! ;-)

@VanLaser太可惜了。以这种速度,全人类将立即沦为虚无!

“放弃希望,在这里的所有人”

#1 楼

您提到<CR>有趣。 <CR>或回车符,从技术上讲,是指转到行的开头。 <NL>或换行符也称为换行符(通常称为LF)用于表示转到下一行。随着时间的流逝,大多数应用程序之间的区别消失了。1按Enter实际上通常会产生回车符(尝试按CtrlVEnter-在Unix终端中应该会看到^M)。 <NL>的控制代码是CtrlJ。

man ascii 2,它是移出字符:

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该表的排列方式使得字母对应于同一行上字符的控制代码。

评论


我一直以为Ctrl-N用于下一个,而Ctrl-P用于上一个。无论如何,这就是它们在Emacs中所代表的含义,即它们绑定到下一行和上一行。此外,Ctrl-P不会移入;这是数据链接转义。移入是Ctrl-O。

– Lithis
2015年8月10日17:24



@Lithis我已纠正。

–muru
15年8月10日在17:25

@Lithis老实说,我对Emacs唯一了解的是c-x c-e。

–muru
15年8月10日在17:28

历史明确的答案,非常感谢Muru!我应该想到答案通常位于其中的字符的ASCII码。

–statox♦
15年8月11日在7:59

@muru太糟糕了,因为Emacs实际上提供了很多东西,特别是它的组织模式对我有很大帮助。我建议您检查一下项目Spacemacs github.com/syl20bnr/spacemacs,该项目主要关注Vim仿真,因此您不需要知道任何传统的Emacs命令即可使用。也许那会改变您的看法。

– xji
2015年8月15日在3:10



#2 楼

请参阅:help key-notation



<NL>表示“换行”,而<CR>表示“回车”。

这是断开当前行的两种不同方式。从历史上讲,它们绑定到不同的控制字符(ctrl-jctrl-m),但通常使用相同的键<CR>插入。我同意在这种情况下使用<NL>似乎违反直觉。

所有这些“映射”(它们实际上不是映射)的行为方式完全相同。

历史在很大程度上也跨平台约束。

没有专用的运动键Bill Joy的终端,但是箭头贴花在hjkl键上。由于模态编辑器在当时很少见,因此按这些键只会将关联的角色插入到您所做的任何事情中。您必须按<C-h><C-j><C-k><C-l>才能在屏幕上移动光标。

您可以看到,j<C-j><NL><Down>之间有很多重叠。 <C-n>在Vim中通常意为“下一个”,很容易看出它是如何与同志们融合在一起的。


由于它们都是同义词,因此您可以自由使用效果最佳的一个例如,

<CR>是用于您自己的映射的有趣键。



评论


感谢您的启发!我非常同意映射。还有一个问题:我知道那些“键组合”实际上不是映射,但是我不确定应该如何称呼它们?

–statox♦
15年8月11日在8:01

这是一个有趣的问题,我倾向于称它们为“命令”。

– romainl
15年8月11日在8:17

我可能是错的,但是“命令”不是指诸如:ls,:substitute,new等之类的ex模式命令吗?

–statox♦
15年8月11日在8:41

x也是一个“命令”。

– romainl
15年8月11日在9:06

实际上,我只是看到该文档将x,dd,c等称为“命令”。所以您一定是正确的,我想j或^ J也是命令。

–statox♦
15年8月11日在9:12