Qual é a maneira mais fácil de inserir um traço no Vim?

33

Para inserir um traço , eu uso ^v u 2014sete pressionamentos de tecla. Existe uma maneira mais fácil? (Eu estava olhando para dígrafos e não encontrei um traço por lá.)

Tomas Tomecek
fonte
4
FYI, U + 2014 é um EM DASH. U + 2013 é um EN DASH. fileformat.info/info/unicode/char/2014/index.htm , fileformat.info/info/unicode/char/2013/index.htm
Quincy Bowers
7
Se você estiver usando o X11, diria o XCompose ... Como isso funcionará em todos os seus aplicativos, e não apenas no Vim. Ou, se você estiver no OSX ou no Windows, os recursos que esse sistema operacional fornece.
Martin Tournoij 25/02
Talvez não seja a maneira mais fácil, mas eu costumo usar <Ctrl-Shift-U>2013<Space>porque funciona em qualquer lugar. Alguns códigos-chave percorrem um longo caminho (eu uso principalmente U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / °).
wchargin
Por curiosidade, como você exibe traços? AFAIK, não há como exibir corretamente as fontes de largura não fixa (ou seja, com larguras de caracteres não uniformes e kerning); portanto, traços e traços sempre se parecem exatamente com hífens que se estendem até a extremidade extrema do limite de caracteres. Você não se importa em ter uma desconexão extrema entre como o personagem é exibido no Vim e como é renderizado em outro lugar?
Kyle Strand
2
Estou com @Carpetsmoker: Compose - - -para um traço, Compose - - .para um traço. A composição é mágica, especialmente se você a mapear para o Caps-Lock totalmente não utilizado.
Rmano 26/02

Respostas:

42

Você pode usar dígrafos: Ctrl+k-N(com letras maiúsculas N)

No modo Inserir, os digrafos são inseridos Ctrl+kseguidos por uma sequência de dois caracteres. Para en-dash, a sequência é -N.

Como Quincy apontou, U+2014é em-dash. Se você deseja inserir isso usando dígrafos, a sequência é -M.

tommcdo
fonte
Da mesma forma, um EM DASH pode ser inserido com <Ck> -M.
Quincy Bowers
U+2014não é en-dash? minha vida inteira foi uma mentira! Edit: agora entendi: minha fonte de terminal (Inconsolata) processa os dois traços da mesma maneira.
Tomas Tomecek
3
Para chegar a esta resposta: hex 2013 é decimal 8211. Use o :digraphscomando para exibir todos os dígitos e procure por 8211.
200_success
10

Se não houver um dígrafo predefinido ou você desejar uma sequência de teclas mais memorável, poderá definir os dígrafos no seu vimrc. Por exemplo, a seguir, definiremos dois dígrafos para en dash (8211) e em dash (8212) que espelham suas seqüências XCompose.

digraph -. 8211 -- 8212

O :digraphcomando espera que o valor seja especificado em decimal e não em hexadecimal, e é por isso que é 8211 para traço em vez de 2013.

jamessan
fonte
O digraph en dash está embutido.
200_success 25/02
1
@ 200_success Eu não disse que não era. :) As opções de dígrafos do Vim nem sempre estão alinhadas com as mais padrão, portanto, saber definir seu próprio dígrafo é útil, mesmo que já exista.
21415 jamessan
8

A maneira padrão de inserir um traço no Vim é usar um dígrafo, como o tommcdo explicou .

No entanto, acho dígrafos em geral, e particularmente este ( Ctrl+k, -, Shift+N) muito estranho para digitar. Para entrada mais rápida de traços, você pode adicionar o seguinte par de mapeamentos no modo de inserção a um arquivo de tipo de arquivo, como .vim/after/ftplugin/markdown.vim.

Para traços en / em, respectivamente:

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- —

NB Os <buffer>meios que esse mapeamento se aplica somente aos arquivos Markdown. Isso é necessário porque existem alguns contextos (por exemplo, programação) em que não quero que dois hífens sejam substituídos por hífens.

Esses mapeamentos aproveitam o fato de que, nos contextos que eu normalmente os uso, traços são cercados por espaços e traços não . * Portanto, usar esses mapeamentos significa que eu posso usar exatamente as mesmas teclas pressionadas nos editores de texto menos capazes que às vezes sou forçado a usar e ainda assim obter uma saída sensata. **

Na verdade, uso uma solução um pouco mais complicada do que a anterior, porque, por razões tipográficas, gosto de cercar meus traços com espaços para os cabelos . Ter esses itens no Markdown torna menos legível, mas, felizmente, o Vim tem uma solução para isso, com sua função "ocultar", que permite ocultar certos itens de sintaxe quando o cursor está em uma linha diferente: ***

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- &#8202;—&#8202;

syntax match entity_hairspace "&#8202;" conceal
setl conceallevel=2

* Se eu precisar usar um traço sem espaçamento, basta pressionar o backspace após digitar o mapeamento.
** Se você geralmente não usa hífens como este, ou se nunca se aventura no Vim, pode usar outra coisa para acionar os mapeamentos: por exemplo, --.e ---. Se você usar outros gatilhos, também poderá colocá-lo diretamente no seu .vimrc e remover as <buffer>opções.
*** Você também pode usar um caractere ccharoculto para substituir itens de sintaxe por um único caractere, em vez de ocultá- los completamente. Se você estiver preocupado com problemas de codificação, use-o para fazer com que o Vim exiba &ndash;entidades HTML no arquivo como traços.

Rico
fonte
Então você usa traços no Vim? Eles não parecem meio estranhos, já que recebem apenas uma largura de coluna? Você conhece algum truque para fazer traços ocuparem uma boa quantidade de espaço, talvez duas colunas?
Kyle Strand
@KyleStrand Como hacky você deseja obter? Tente o seguinte: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Observe que o primeiro traço nesse comando é um traço eme o segundo é um hífen-menos de largura total.) #
282 Rich Rich
Não vejo diferença na exibição ou por que isso faria com que a exibição ocupasse duas colunas. Por acaso você entendeu mal a minha pergunta ou é provável que eu esteja entendendo mal a sua sugestão?
Kyle Strand
.... na verdade, não sei nada sobre a especificação de sintaxe do Vim. O syntax matchcomando funciona mesmo fora do contexto de um arquivo de sintaxe?
Kyle Strand
@KyleStrand eu entendi sua pergunta. Você tentou copiar essa linha no seu vimrc? Ou apenas executá-lo no Vim? :)
Rich
3

No meu teclado francês AZERTY Mac, posso inserir um traço com Alt+ -. Sua milhagem pode obviamente variar.

romainl
fonte
2
Alt+-(ou melhor, Option+-ser pedante) é um atalho específico para Mac. Ele funciona em qualquer lugar do OS X, mas não está relacionado ao vi ou vim.
ash108
1
Funciona no MacVim, mas no Terminal vim atua como [Esc] seguido por -, alternando para o modo Normal e colocando o cursor no início da linha anterior.
200_success
3

Instale meu plug-in unicode , digite Vim e digite DASH seguido por CtrlXCtrlZpara ativar a conclusão do unicode.

insira a descrição da imagem aqui

(Observe -N na descrição que mostra o dígrafo para inserir esse caractere)

Christian Brabandt
fonte
0

Inspirado pela ótima resposta de Rich, adicionei as seguintes linhas ao meu vimrc:

" For en/em dashes, respectively
autocmd FileType markdown imap -- –
autocmd FileType markdown imap --- —

Funciona como um prazer!

Will Wright
fonte
0

Para um traço, um dígrafo é o melhor caminho a seguir, conforme sugerido em várias outras respostas. Mas para caracteres unicode arbitrários, outra maneira é usar^V no modo de inserção (consulte :he i_CTRL-V_digit).

Para um traço que seria por exemplo ^Vu2013.

tremer
fonte
Agora percebo que isso é realmente o que o OP já estava fazendo! (Embora traço seja 2013, não 2014 - isso é traço.) Acho que ainda pode ser bom ter algum lugar na pilha de respostas.
tremby