Digamos que quiero producir el siguiente texto en mi documento:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
¿Hay alguna forma fácil de escribir el "Some Msg" verticalmente como se indica arriba sin tener que insertar manualmente cada carácter en cada línea?
insert-mode
formatting
Allan Hasegawa
fuente
fuente
:s/./% \0\r/
agregar las%
nuevas líneas ... Sin embargo, no es una gran solución ...Respuestas:
Una solución realmente buena probablemente requeriría más trabajo, pero "no está mal" no es muy difícil de lograr.
Idea
Todo lo que necesitamos es mover una línea hacia abajo después de cada personaje, ¡así que hagamos eso mediante
InsertCharPre
el comando automático!Código
Póngalo
.vimrc
o mejor aún en algún archivo delplugin/
directorio.Uso
Ingrese el
:Vert
comando para comenzar a escribir verticalmente. Al salir del modo de inserción, se desactiva automáticamente este "modo". Por supuesto, puede asignarlo a un acceso directo si necesita usar este comando con frecuencia.Problemas conocidos
InsertLeave
evento, que no se dispara; por lo tanto, usar la tecla requiere tener cuidado).fuente
<C-C>
.InsertLeave
no se activa esta tecla.<C-C>
como una buena manera de salir del modo Insertar. La forma en que lo mencionaste podría implicar que a veces es un buen método. Es como decir "Advertencia: su documento no se guardará si cierra Microsoft Word desconectando su computadora".<C-C>
el motivo del problema. No conozco otro método para dejar el modo de inserción que suprima la expansión de abreviaturas como lo<C-C>
hace, si no existe, es útil al menos como parte de un mapeo comoinoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.<C-C>
como salir del modo Insertar sin ampliar las abreviaturas, y no se menciona cómo no desencadenaInsertLeave
eventos. Ahora tengo curiosidad por saber si hay una forma integrada de hacerlo, pero por ahora su mapeo es una gran idea.Puede escribir como de costumbre y luego convertir el texto horizontal actual en vertical utilizando la sustitución en Vim de la siguiente manera (se aplica a la línea actual):
O un método mucho más fácil de recordar es ejecutar uno de los siguientes comandos (para todas las líneas):
Para solicitar solo la línea actual o más líneas, preceda con V, expanda el área para más líneas si es necesario, y ejecute arriba (pero sin
%
).Para PowerShell en Windows, verifique la sustitución de pliegue .
Para definir la asignación de teclas simple (por ejemplo F2), intente lo siguiente:
Luego escriba algo y presione F2para que el texto sea vertical, así de simple.
Otra alternativa es configurar el ajuste automático de palabras, p. Ej.
Eso ajustará automáticamente el texto tan cerca de 1 carácter como lo permita el espacio en blanco. La desventaja es que cada letra debe ir seguida de espacio (por lo que es casi lo mismo que presionaría)Enter
fuente
:s/\(.\)/\1\r/g
eso, podría usar el:s/./\0\r/g
que es funcionalmente idéntico.Me parece que las macros son una forma increíble de hacer cosas inusuales si estás interesado en hacerlo no más de una vez en una luna azul. Digamos que tienes la siguiente tabla:
Y digamos que desea reemplazar
Some Msg
conOther Message
. En primer lugar, ampliemos la tabla para el carácter adicional (línea antes de la últimayy5p
:La macro que se me ocurrirá se encargará de convertir el texto de horizontal a vertical mientras reemplaza el texto anterior. Comience escribiendo el texto en la primera ubicación (el cursor está al final de
Other Message
):Grabe la siguiente macro:
qq
: comienza a grabar la macro llamadaq
^
: ir al comienzo de la línea3l
: ir a la columna donde se colocará el textox
: borra el antiguo personajel
: moverse hacia la derecha, dejando un carácter del mensaje en lugar del antiguo carácter:v
: ir al modo visualf|
: Salta a|
2h
: retroceder dos personajesd
: selección de cortej
: mover hacia abajoP
: pegar antes del cursorq
: terminar de grabar la macroEn este punto tienes:
Repita la macro la cantidad suficiente de veces (es decir, la cantidad de caracteres, pero no necesita saberlo de antemano. Simplemente subestime y continúe una vez que vea cuán cerca estaba su estimación). Así que vamos a ir con
10@q
. Usted obtiene:Ok, uno más (
@q
):Tu cursor está ahora en el último
e
. La macro no funciona bien con la última letra (puede intentar con@q
y luegou
(deshacer) para obtener resultados insatisfactorios). Simplemente ajústelo usted mismo (X
para retroceder).fuente
qq03lxldt|i ^[jPxq@q