Disons que je veux produire le texte suivant dans mon document:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
Existe-t-il un moyen simple d'écrire verticalement "certains messages" comme ci-dessus sans avoir à insérer manuellement chaque caractère dans chaque ligne?
insert-mode
formatting
Allan Hasegawa
la source
la source
:s/./% \0\r/
pour ajouter le%
et les nouvelles lignes ... Pas une bonne solution, cependant ...Réponses:
Une très bonne solution nécessiterait probablement un peu plus de travail, mais "pas mal" n'est pas très difficile à réaliser.
Idée
Tout ce dont nous avons besoin est de déplacer une ligne vers le bas après chaque caractère, alors faisons-le via
InsertCharPre
la commande automatique!Code
Mettez-le
.vimrc
ou mieux encore dans un fichier duplugin/
répertoire.Usage
Entrez la
:Vert
commande pour commencer à écrire verticalement. Quitter le mode insertion désactive automatiquement ce "mode". Bien sûr, vous pouvez le mapper à un raccourci si vous devez souvent utiliser cette commande.Problèmes connus
InsertLeave
événement, qui n'est pas déclenché; donc l'utilisation de la touche nécessite d'être prudent).la source
<C-C>
.InsertLeave
n'est pas déclenché pour cette clé.<C-C>
comme un bon moyen de quitter le mode Insertion. La façon dont vous l'avez mentionné pourrait impliquer que c'est parfois une bonne méthode. C'est un peu comme dire "Attention: votre document ne sera pas enregistré si vous fermez Microsoft Word en débranchant votre ordinateur."<C-C>
l'origine du problème. Je ne suis pas au courant d'une autre méthode pour laisser le mode d'insertion supprimer l'expansion des abréviations comme le<C-C>
fait, s'il n'y en a pas, c'est utile au moins dans le cadre d'un mappage commeinoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.<C-C>
de quitter le mode Insertion sans développer les abréviations, et il n'y a aucune mention de la façon dont cela ne déclenche pas d'InsertLeave
événements. Je suis maintenant curieux de savoir s'il existe un moyen intégré de le faire, mais pour l'instant votre cartographie est une excellente idée.Vous pouvez taper comme d'habitude, puis convertir le texte horizontal actuel en vertical en utilisant la substitution dans Vim comme suit (s'applique à la ligne actuelle):
Ou bien, la méthode la plus facile à retenir consiste à exécuter l'une des commandes suivantes (pour toutes les lignes):
Pour appliquer uniquement à la ligne actuelle ou à plusieurs lignes, faites précéder de V, développez la zone pour plus de lignes si nécessaire et exécutez ci-dessus (mais sans
%
).Pour PowerShell sous Windows, vérifiez la substitution pour fold .
Pour définir un mappage de clé simple (par exemple F2), essayez ce qui suit:
Tapez ensuite quelque chose et appuyez sur F2pour rendre le texte vertical, aussi simple que cela.
Une autre alternative consiste à définir un habillage automatique des mots, par exemple
Cela encapsulera automatiquement le texte aussi près que 1 caractère que l'espace blanc le permet. L'inconvénient est que chaque lettre doit être suivie d'un espace (c'est donc presque la même chose que vous appuieriez surEnter
la source
:s/\(.\)/\1\r/g
, vous pouvez simplement utiliser:s/./\0\r/g
ce qui est fonctionnellement identique.Je trouve que les macros sont un excellent moyen de faire des choses inhabituelles si vous êtes intéressé à le faire pas plus d'une fois dans une lune bleue. Disons que vous avez le tableau suivant:
Et disons que vous souhaitez remplacer
Some Msg
parOther Message
. Tout d'abord, étendons la table pour le caractère supplémentaire (ligne avant-dernièreyy5p
:La macro que je vais proposer va prendre soin de convertir le texte de l'horizontale en verticale tout en remplaçant l'ancien texte. Commencez par taper le texte au premier emplacement (le curseur est à la fin de
Other Message
):Enregistrez la macro suivante:
qq
: démarrer l'enregistrement de la macro nomméeq
^
: aller au début de la ligne3l
: passer à la colonne où le texte va être placéx
: supprimer l'ancien caractèrel
: déplacez-vous vers la droite, en laissant un caractère du message à la place de l'ancien caractère:v
: passer en mode visuelf|
: sauter à|
2h
: reculer de deux caractèresd
: sélection de coupej
: descendreP
: coller avant le curseurq
: terminer l'enregistrement de la macroÀ ce stade, vous avez:
Répétez la macro suffisamment de fois (c'est-à-dire le nombre de caractères, mais vous n'avez pas besoin de le savoir à l'avance. Il suffit de sous-estimer et de continuer une fois que vous voyez à quel point votre estimation était proche). Alors allons-y
10@q
. Vous recevez:Ok, encore un (
@q
):Votre curseur est maintenant sur le dernier
e
. La macro ne fonctionne pas bien avec la dernière lettre (vous pouvez essayer avec@q
puisu
(annuler) pour des résultats insatisfaisants). Réglez-le simplement vous-même (X
pour le retour arrière).la source
qq03lxldt|i ^[jPxq@q