Digamos que eu queira produzir o seguinte texto no meu documento:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
Existe alguma maneira fácil de escrever verticalmente "Some Msg" como acima, sem precisar inserir manualmente cada caractere em cada linha?
insert-mode
formatting
Allan Hasegawa
fonte
fonte
:s/./% \0\r/
adicionar as%
novas linhas ... Mas não é uma ótima solução ...Respostas:
Uma solução realmente boa provavelmente exigiria mais trabalho, mas "não é ruim" não é muito difícil de alcançar.
Idéia
Tudo o que precisamos é mover uma linha para baixo após cada caractere, então vamos fazer isso via
InsertCharPre
comando automático!Código
Coloque-o
.vimrc
ou, melhor ainda, em algum arquivo noplugin/
diretórioUso
Digite o
:Vert
comando para começar a escrever verticalmente. Sair do modo de inserção desativa automaticamente esse "modo". Obviamente, você pode mapeá-lo para um atalho se precisar usar esse comando com frequência.Problemas conhecidos
InsertLeave
evento, que não é acionado; portanto, usar a chave exige que você tenha cuidado).fonte
<C-C>
.InsertLeave
não é acionado para essa chave.<C-C>
como uma boa maneira de sair do modo Inserir. A maneira como você mencionou isso pode significar que às vezes é um bom método. É como dizer "Advertência: seu documento não será salvo se você fechar o Microsoft Word desconectando o computador".<C-C>
o motivo do problema. Não conheço outro método para deixar o modo de inserção suprimindo a expansão da abreviação, como<C-C>
acontece, se não houver, é útil pelo menos como parte de um mapeamentoinoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.<C-C>
como sair do modo Inserir sem expandir abreviações, e não há menção de como ele não acionaInsertLeave
eventos. Agora estou curioso para saber se existe uma maneira integrada de fazer isso, mas por enquanto seu mapeamento é uma ótima idéia.Você pode digitar como de costume e depois converter o texto horizontal atual em vertical usando a substituição no Vim da seguinte forma (aplica-se à linha atual):
O método mais fácil de lembrar é executar um dos seguintes comandos (para todas as linhas):
Para aplicar apenas para a linha atual ou mais linhas, anteceda com V, expanda a área para mais linhas, se necessário, e execute acima (mas sem
%
).Para o PowerShell no Windows, verifique a substituição para fold .
Para definir o mapeamento de teclas simples (por exemplo F2), tente o seguinte:
Em seguida, digite algo e pressione F2para tornar o texto vertical, simples assim.
Outra alternativa é definir a quebra automática de linha, por exemplo
Isso envolverá automaticamente o texto o mais próximo de 1 caractere, conforme o espaço em branco permitir. A desvantagem é que cada letra precisa ser seguida por espaço (então é quase o mesmo que você pressionariaEnter
fonte
:s/\(.\)/\1\r/g
, você pode simplesmente usar o:s/./\0\r/g
que é funcionalmente idêntico.Acho que as macros são uma maneira incrível de fazer coisas incomuns se você estiver interessado em fazer isso mais de uma vez na lua azul. Digamos que você tenha a seguinte tabela:
E digamos que você deseja substituir
Some Msg
comOther Message
. Primeiro, vamos estender a tabela para o caractere extra (linha antes do últimoyy5p
:A macro que eu vou criar cuidará da conversão do texto de horizontal para vertical enquanto substitui o texto antigo. Comece digitando o texto no primeiro local (o cursor está no final de
Other Message
):Registre a seguinte macro:
qq
: inicia a gravação da macro denominadaq
^
: ir para o início da linha3l
: mova para a coluna onde o texto será colocadox
: excluir o caractere antigol
: mova para a direita, deixando um caractere da mensagem no lugar do caractere antigo:v
: vá para o modo visualf|
: pule para|
2h
: retroceder dois caracteresd
: seleção de cortej
: descerP
: colar antes do cursorq
: encerra a gravação da macroNeste ponto, você tem:
Repita a macro o número suficiente de vezes (ou seja, o número de caracteres, mas você não precisa conhecê-la com antecedência. Apenas subestime e continue depois de ver o quão perto sua estimativa estava). Então vamos com
10@q
. Você obtém:Ok, mais um (
@q
):Seu cursor está agora no último
e
. A macro não funciona bem com a última letra (você pode tentar@q
eu
desfazer) para obter resultados insatisfatórios. Simplesmente ajuste você mesmo (X
para backspace).fonte
qq03lxldt|i ^[jPxq@q