Je voulais écrire ceci:
A = mapping[0]
B = mapping[1]
C = mapping[2]
D = mapping[3]
E = mapping[4]
F = mapping[5]
G = mapping[6]
H = mapping[7]
I = mapping[8]
J = mapping[9]
K = mapping[10]
L = mapping[11]
M = mapping[12]
N = mapping[13]
O = mapping[14]
P = mapping[15]
Q = mapping[16]
R = mapping[17]
S = mapping[18]
T = mapping[19]
U = mapping[20]
V = mapping[21]
W = mapping[22]
X = mapping[23]
Y = mapping[24]
Z = mapping[25]
J'ai fini par utiliser LibreCalc, en mettant les différentes parties dans différentes cellules, en ajoutant les lettres et les chiffres, en concaténant les résultats et en recollant le lot dans Vim.
J'apprécie que ce que je voulais écrire soit un code affreux. J'étudie actuellement Python et j'ai essayé d'éviter d'aller chercher moi-même des informations dont je sais qu'elles seront traitées plus tard dans le cours que je suis en train de suivre ( http://interactivepython.org/ ).
Le moyen le plus rapide que je connaissais pour le faire dans vim était de taper quelque chose comme
A = mapping[0] <ESC> hh <CTRL>+<V> BBh y $ o B <ESC> y 1] <CR>
Je sais que vim est très puissant (je l'utilise depuis quelques semaines, je l'apprécie vraiment).
Aurait-il été possible d'écrire ce que je voulais avec une commande vim?
:verbose map y
devrait vous montrer les mappages qui commencent pary
vous, et où ils ont été définis. Mais vous devez utiliseryy
en mode normal.vim
incrémenteA
àB
laCtrl-a
mesure? Le mien ne l'est certainement pas, et je suis en marche7.4 1-1202
.:set nrformats+=alpha
. Il ajoutera la valeuralpha
à l'option'nrformats'
et devrait permettreCtrl-a
d'incrémenter les caractères alphabétiques. Si vous aimez ce comportement, vous pouvez l'ajouter à votre vimrc. Sinon, vous pouvez l'ajouter à l'option avec l'opérateur+=
et la supprimer ensuite avec l'opérateur-=
(:set nrformats-=alpha
).Je préfère la solution d'incrément visuel utilisée par @VanLaser (voir
:h v_CTRL-A
). Cependant, je montrerai que cela peut également être fait via une macro.Commencer avec:
Enregistrez les touches suivantes dans une macro de votre choix (par exemple
q
):Cela dupliquera la ligne, puis incrémentera le premier caractère (par exemple
A
), puis incrémentera la partie numérique. Exécutez cette macro 24 fois et vous avez terminé, par exemple24@q
.qq
- commencer l'enregistrement dans le registreq
yyp
- dupliquer la ligne:set nrformats+=alpha<cr>
-'nrformats
n'a pasalpha
par défaut<c-a>
- Avecalpha
nous pouvons maintenant incrémenter les lettres:set nrformats-=alpha<cr>
- retireralpha
de'nrformats'
<c-a>
- incrémenter le nombre suivantq
- arrête d'enregistrer24@q
- rejouer la macro dans le registreq
24 foisPour plus d'aide, voir:
la source
Bonnes réponses déjà fournies, je n'aurais pas pensé y aller aussi bien. J'aurais tapé toutes les lettres sur une seule ligne, puis introduit le texte et le saut de ligne avec une substitution d'expression (en utilisant le numéro de ligne pour le numéro incrémentiel), quelque chose comme
la source
Presque toujours lorsque je fais quelque chose comme ça, je choisis d'utiliser des
:substitute
macros. En particulier, la capacité d'évaluer l'expression en remplacement au début le\=
permet souvent (voir:h sub-replace-special
).Une fois que vous avez des lignes vides en place (
25i<Enter><Esc>
), vous pouvez utiliser la commandeles séquences nécessaires sont générées en utilisant le
'.'
numéro de ligne ( argument) actuel retourné par la fonctionline()
et en utilisant nr2char () pour convertir les nombres décimaux en équivalents ASCII (65 = A). Les chaînes nécessaires sont concaténées en utilisant.
la source
Vous pouvez toujours essayer d'utiliser le système d'exploitation ...
la source