Vi em algum lugar na web alguém usando Ctrl-J
e, como não conhecia esse mapeamento, procurei no documento relevante e encontrei o seguinte:
j or
<Down> or
CTRL-J or
<NL> or
CTRL-N [count] lines downward linewise.
O que me leva a várias perguntas:
- O que é
<NL>
: eu o veria como equivalente,<CR>
já que pressionar Enterpressionará uma linha no modo normal por padrão, mas por que está<NL>
aqui e não<CR>
? - Qual é a diferença entre esses mapeamentos : todas essas 5 opções ficam uma linha abaixo da mesma maneira? De acordo com meus testes, eu responderia que sim, mas isso levaria à minha próxima pergunta.
- Por que existem 5 mapeamentos para fazer exatamente a mesma coisa : eu posso entender isso
j
e<down>
são mantidos para usuários que não estão acostumados a vim mapeamentos, mas por que os outros mapeamentos existem? - Quando é mais interessante usar um a mais que o outro : Essa é uma continuação da pergunta anterior: se existem tantas possibilidades, acho que elas têm vantagens diferentes ou são melhores para uso em casos de uso específicos. Quais são esses casos de uso?
Acho que a redundância destes comandos ainda mais estranho quando eu olhar para :h k
: existem apenas 3 maneiras de ir para cima: k
, <UP>
e ctrl-p
. Portanto, a questão do bônus é: Por que existem 5 maneiras de descer e apenas 3 para subir?
cursor-movement
statox
fonte
fonte
Ctrl-J
ligação padrão ? Parece ser comum, pelo menos entre os que conheço, mapearCtrl-J/K
para "descer / subir até a próxima linha com o mesmo nível de indentação da linha de partida".<CR>
aqui estão"Respostas:
Interessante que você mencionou
<CR>
.<CR>
ou retorno de carro, tecnicamente usado para significar ir para o início da linha .<NL>
, ou nova linha, também conhecida como feed de linha (geralmente chamadaLF
), foi usada para significar ir para a próxima linha . Com o tempo, a distinção foi perdida na maioria dos aplicativos. 1 Pressionar Enterrealmente produz um retorno de carro, geralmente (tente pressionar CtrlVEnter- você deve ver^M
nos terminais Unix).<NL>
O código de controle é CtrlJ.CtrlNme surpreendeu. De acordo com 2 , é um caractere de mudança de posição :
man ascii
A mudança de e mudança fora caracteres, de acordo com a Wikipedia :
Como acabou o significado ir para baixo é um mistério para mim.
Bem, as três maneiras de subir têm maneiras correspondentes de descer. ( CtrlPpresumivelmente é o complemento de CtrlN, implicando que a mudança de entrada / saída não é relevante aqui). As duas maneiras adicionais abaixo (
<NL>
ou CtrlJ) são na verdade duas representações da mesma maneira.<NL>
é uma herança dos dias da máquina de escrever - e naqueles dias, acho que não havia uma chave para subir - apenas para descer.Veja também:
1 Isso ainda é importante em alguns casos (impressão
\r
(retorno de carro) e\n
(alimentação de linha), usando a maioria das funções / ferramentas de impressão formatadas, ainda mantendo o significado antigo.).2 Esta tabela está organizada de forma que o alfabeto corresponda ao código de controle do caractere na mesma linha.
fonte
Ctrl-N
era para o próximo , eCtrl-P
era para o anterior . É isso que eles representam no Emacs, de qualquer maneira, ao qual eles estão vinculadosnext-line
eprevious-line
. Além disso,Ctrl-P
não é mudança ; é escape de link de dados . A mudança éCtrl-O
.Veja
:help key-notation
.<NL>
significa "avanço de linha" e<CR>
"retorno de carro".Essas são duas maneiras diferentes de quebrar a linha atual. Historicamente, eles estão vinculados a caracteres de controle diferentes (
ctrl-j
ectrl-m
), mas geralmente são inseridos com a mesma chave<CR>
,. Concordo que usar<NL>
neste contexto parece contra-intuitivo.Todos esses "mapeamentos" (na verdade não são mapeamentos) se comportam exatamente da mesma maneira.
História, principalmente, também restrições de plataforma cruzada.
Não havia teclas de movimento dedicadas no terminal de Bill Joy, mas os decalques das setas estavam nas
hjkl
teclas. Como os editores modais eram raros na época, pressionar essas teclas apenas inseria o caractere associado no que você estava fazendo. Você tinha que pressionar<C-h>
,<C-j>
,<C-k>
e<C-l>
para mover o cursor na tela.Como você pode ver, há muito uma sobreposição entre
j
,<C-j>
,<NL>
e<Down>
.<C-n>
geralmente significando "próximo" no Vim, é fácil ver como ele foi agrupado com seus companheiros.Como todos são sinônimos, você é livre para usar o que funciona melhor para você.
<CR>
, por exemplo, é uma chave interessante a ser usada para seus próprios mapeamentos.fonte
<CR>
mapeamento. Também mais uma pergunta: eu sei que essas "combinações de teclas" não são realmente chamadas de mapeamentos, mas não tenho certeza de como devo chamá-las.:ls
,:substitute
,new
, etc ...?x
também é um "comando".x
,dd
,c
, etc "comandos". Então você deve estar certo, acho quej
ou^J
também são comandos.