Eu queria escrever isso:
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]
Acabei usando o LibreCalc, colocando as diferentes partes em diferentes células, adicionando letras e números, concatenando os resultados e colando o lote de volta no Vim.
Aprecio que o que eu queria escrever é um código terrível. Estou estudando Python no momento e tenho tentado evitar encontrar informações que eu sei que serão abordadas mais tarde no curso que estou seguindo ( http://interactivepython.org/ ).
A maneira mais rápida que eu sabia de fazer isso no vim era digitar algo como
A = mapping[0] <ESC> hh <CTRL>+<V> BBh y $ o B <ESC> y 1] <CR>
Eu sei que o vim é muito poderoso (eu o uso há algumas semanas, estou gostando muito).
Teria sido possível escrever o que eu queria com algum comando vim?
:verbose map y
deve mostrar quais mapeamentos começam comy
você e onde eles foram definidos. Mas você tem que usaryy
no modo normal.vim
incrementaráA
aB
com aCtrl-a
ação? O meu definitivamente não, e eu estou7.4 1-1202
.:set nrformats+=alpha
. Ele adicionará o valoralpha
à opção'nrformats'
e deve permitirCtrl-a
"incrementar" caracteres alfabéticos. Se você gosta desse comportamento, pode adicioná-lo ao seu vimrc. Caso contrário, você poderá adicioná-lo à opção com o operador+=
e removê-lo posteriormente com o operador-=
(:set nrformats-=alpha
).Prefiro a solução de incremento visual usada pelo @VanLaser (consulte
:h v_CTRL-A
). No entanto, mostrarei que isso também pode ser feito via macro.Começar com:
Registre as seguintes teclas pressionadas em uma macro de sua escolha (por exemplo
q
):Isso duplicará a linha e aumentará o primeiro caractere (por exemplo
A
) e aumentará a parte numérica. Execute essa macro 24 vezes e pronto, por exemplo24@q
.qq
- comece a gravar no registroq
yyp
- duplicar a linha:set nrformats+=alpha<cr>
-'nrformats
não possuialpha
por padrão<c-a>
- Comalpha
agora podemos incrementar letras:set nrformats-=alpha<cr>
- removeralpha
de'nrformats'
<c-a>
- incrementar o próximo númeroq
- pare de gravar24@q
- repete a macro no registroq
24 vezesPara obter mais ajuda, consulte:
fonte
Boas respostas já fornecidas, eu não teria pensado em fazê-lo tão bem. Eu teria digitado todas as letras em uma única linha e introduzido o texto e a quebra de linha com uma substituição de expressão (usando o número da linha como número incremental), algo como
fonte
Quase sempre, ao fazer algo assim, eu escolho usar
:substitute
sobre macros. Especialmente a capacidade de avaliar a expressão em substituição ao iniciar\=
torna frequentemente possível (consulte:h sub-replace-special
).Depois de ter linhas vazias no lugar (
25i<Enter><Esc>
), você pode usar o comandoas seqüências necessárias são geradas usando o número da linha atual (
'.'
argumento) retornado pela funçãoline()
e usando nr2char () para converter números decimais em equivalentes ASCII (65 = A). As seqüências necessárias são concatenadas usando.
fonte
Você sempre pode tentar usar o sistema operacional ...
fonte