Quel est le moyen le plus simple d’insérer un tiret dans Vim?


33

Pour insérer un tiret , j’utilise ^v u 2014sept pressions de touches. Y a-t-il un moyen plus facile? (Je regardais les digraphes et je n'y ai pas trouvé de tiret.)



7
Si vous utilisez X11, je dirais XCompose ... Cela fonctionnera pour toutes vos applications, et pas seulement pour Vim. Ou si vous êtes sur OSX ou Windows, les installations fournies par ce système d'exploitation.
Martin Tournoij

Ce n’est peut-être pas la façon la plus simple, mais j’ai tendance à l’utiliser <Ctrl-Shift-U>2013<Space>car cela fonctionne partout. Quelques codes de touche vont très loin (j'utilise principalement U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / °).
wchargin

Par curiosité, comment affichez- vous des tirets? Selon les informations dont je dispose, il n’existe aucun moyen d’afficher correctement les polices à largeur non fixe (c.-à-d. Avec des largeurs de caractère non uniformes et un crénage), de sorte que les traits et les tirets ressemblent toujours exactement à des traits d’union qui s’étendent jusqu’au bord extrême de la limite du caractère. Cela ne vous dérange-t-il pas d'avoir une déconnexion extrême entre la façon dont le personnage est affiché dans Vim et son rendu ailleurs?
Kyle Strand

2
Je suis avec @Carpetsmoker: Compose - - -pour un tableau de bord, Compose - - .pour un tableau de bord. La composition est magique, surtout si vous la mappez sur le Caps-Lock par ailleurs totalement inutilisé.
Rmano

Réponses:


42

Vous pouvez utiliser des digrammes: Ctrl+k-N(avec une majuscule N)

En mode insertion, les digrammes sont entrés par Ctrl+ksuivis d'une séquence de deux caractères. Pour en-dash, la séquence est -N.

Comme Quincy l'a fait remarquer, U+2014em-Dash. Si vous voulez entrer cela en utilisant des digrammes, la séquence est -M.


De même, un EM DASH peut être inséré avec <Ck> -M.
Quincy Bowers

U+2014n'est pas au tableau de bord? toute ma vie était un mensonge! Edit: maintenant je comprends: ma police de terminal (Inconsolata) affiche les deux tirets de la même manière.
Tomas Tomecek

3
Pour arriver à cette réponse: hex 2013 est le nombre décimal 8211. Utilisez la :digraphscommande pour afficher tous les digrammes et cherchez 8211.
200_success

10

S'il n'y a pas de digraphe prédéfini ou si vous voulez une séquence de touches plus mémorable, vous pouvez définir des digrammes dans votre vimrc. Par exemple, ci-dessous définira deux digrammes pour en dash (8211) et em dash (8212) qui reflètent leurs séquences XCompose.

digraph -. 8211 -- 8212

La :digraphcommande s'attend à ce que la valeur soit spécifiée en décimal plutôt qu'en hexa, raison pour laquelle il s'agit de 8211 pour en tiret plutôt que 2013.


Le digraphe en tiret est intégré.
200_success

1
@ 200_success Je n'ai pas dit que ce ne l'était pas. :) Les choix de digraphe de Vim ne s'alignent pas toujours sur ceux plus standard, savoir comment définir son propre digraphe est utile, même s'il en existe déjà un.
jamessan

8

La méthode standard pour insérer un tiret dans Vim consiste à utiliser un digraphe, comme l' explique tommcdo .

Cependant, je trouve digraphs en général, et en particulier celui - ci ( Ctrl+k, -, Shift+N) assez difficile à taper. Pour une saisie plus rapide des tirets, vous pouvez ajouter la paire suivante de mappages en mode insertion à un fichier type, tel que .vim/after/ftplugin/markdown.vim.

Pour les tirets en / em, respectivement:

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

NB <buffer>: Cela signifie que ce mappage ne s'appliquera qu'aux fichiers Markdown. Cela est nécessaire car il existe des contextes (par exemple, la programmation) dans lesquels je ne souhaite pas que deux traits d'union soient remplacés par des tirets.

Ces mappages tirent parti du fait que, dans les contextes que je les utilise habituellement, les tirets sont entourés d'espaces et les tirets im ne le sont pas . * Utiliser ces correspondances signifie donc que je peux utiliser exactement les mêmes pressions de touche dans les éditeurs de texte moins performants que je suis parfois obligé d'utiliser tout en obtenant une sortie raisonnable. **

J'utilise en fait une solution légèrement plus compliquée que la précédente, car, pour des raisons typographiques, j'aime entourer mes traits d'un cheveu . Leur présence dans le Markdown le rend moins lisible, mais heureusement, Vim a une solution à cela, avec sa fonction "masquer", qui vous permet de masquer certains éléments de syntaxe lorsque le curseur est sur une autre ligne: ***

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

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

* Si j'ai besoin d'utiliser un tiret en espacement, je peux simplement appuyer sur la touche Retour après avoir tapé le mappage.
** Si vous n'utilisez généralement pas les tirets comme celui-ci, ou si vous ne vous aventurez jamais hors de Vim, vous pouvez utiliser autre chose pour déclencher les mappages: par exemple, --.et ---. Si vous utilisez d'autres déclencheurs, vous pouvez également le placer directement dans votre fichier .vimrc et supprimer les <buffer>options.
*** Vous pouvez également utiliser un caractère dissimulé ccharpour remplacer des éléments de syntaxe par un seul caractère, au lieu de les masquer entièrement. Si vous êtes préoccupé par des problèmes d'encodage, vous pouvez l'utiliser pour que Vim affiche &ndash;les entités HTML dans le fichier sous forme de tirets.


Vous utilisez donc des tirets dans Vim? Est-ce qu'ils n'ont pas l'air bizarre, puisqu'on ne leur donne qu'une largeur de colonne? Connaissez-vous des astuces pour faire en sorte que les tableaux de bord prennent beaucoup de place, peut-être deux colonnes?
Kyle Strand

@ KyleStrand Comment hacky voulez-vous obtenir? Essayez ceci: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Notez que le premier tiret de cette commande est un em-dash, et le second est un trait d'union en largeur totale.)
Rich le

Je ne vois pas de différence dans l'affichage ou je ne vois pas pourquoi cela obligerait l'affichage à prendre deux colonnes. Avez-vous, par hasard, mal compris ma question, ou est-il probable que je comprends mal votre suggestion?
Kyle Strand

.... en fait, je ne connais rien à la spécification de la syntaxe Vim. La syntax matchcommande fonctionne- t-elle même en dehors du contexte d'un fichier de syntaxe?
Kyle Strand

@KyleStrand J'ai compris votre question. Avez-vous essayé de copier cette ligne dans votre vimrc? Ou simplement le lancer dans Vim? :)
Rich

3

Sur mon clavier français AZERTY Mac, je peux insérer un tiret avec Alt+ -. Votre kilométrage peut évidemment varier.


2
Alt+-(ou plutôt Option+-être pédant) est un raccourci spécifique à Mac. Cela fonctionne partout dans OS X, mais n'est pas lié à vi ou vim.
ash108

1
Fonctionne dans MacVim, mais dans Terminal vim, il agit comme [Esc] suivi de -, ce qui permet de passer en mode Normal et de placer le curseur au début de la ligne précédente.
200_success

3

Installez mon plug - in unicode , entrez Vim et tapez DASH, puis sur CtrlXCtrlZpour activer la complétion Unicode.

entrez la description de l'image ici

(Notez le -N dans la description qui montre le digraphe pour saisir ce caractère)


0

Inspiré par l'excellente réponse de Rich, j'ai ajouté les lignes suivantes à mon vimrc:

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

Fonctionne comme un régal!


0

Pour un tirage au trait, un digraphe est la meilleure voie à suivre, comme suggéré dans diverses autres réponses. Mais pour les caractères unicode arbitraires, une autre méthode consiste à utiliser le ^Vmode insertion (voir :he i_CTRL-V_digit).

Pour une fraternité, ce serait par exemple ^Vu2013.


Je réalise maintenant que c’est ce que le PO faisait déjà! (Même si en dash est 2013, pas 2014 - c’est em dash.) Je pense que cela peut quand même être bon d’avoir quelque part dans la pile de réponses, cependant.
Tremby
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.