1
Puede lograr esas o mejores asignaciones de comandos (meñique) muy rápidamente. No recomiendo esta solución, pero como ejemplo, si desea mover el cursor al comienzo de la línea <C-a>
, puede ejecutar la siguiente línea después de presionar :
desde el modo normal (o agregar la línea a su vimrc)
inoremap <C-a> <C-o>0
o, si el inicio de la línea significa el primer carácter de línea no en blanco
inoremap <C-a> <C-o>^
Curiosamente, acabo de probar estas asignaciones en el búfer en el que estoy escribiendo esta respuesta, y me confundí por un momento porque no funcionaron. Entonces me di cuenta de que había olvidado ingresar al modo de inserción. Parece que le resulta difícil abandonar el modo de inserción para ejecutar comandos de modo normal. Después de usar Vim durante un tiempo, es posible que sea al revés, que permanezca en modo normal mientras piensa y solo realice excursiones para insertar el modo en ocasiones particulares. Vim es probable que sólo (o sobre todo) vale la pena aprender si usted encuentra que usted más la edición de escribir texto.
Entonces, una parte de una respuesta a su pregunta sobre la ejecución rápida de comandos de modo normal desde el modo de inserción es <C-o>
, que le permite abandonar el modo de inserción temporalmente para ejecutar un comando de modo normal, luego volver a ingresar. Lea sobre esto en :help i_Ctrl-o
. Esto es útil para conveniencias únicas. Una ruta más sostenible probablemente sea tratar de adoptar el modo normal como predeterminado para la navegación y la edición, y solo ingresar al modo de inserción cuando realmente desee insertar nuevos caracteres a mano en el búfer.
2
Sus ejemplos son muy generales, por lo que es difícil dar respuestas específicas. Voy a inventar un ejemplo específico con la esperanza de que se ajuste o sea traducible a algo que encuentres. Para su número 1, depende de cómo sepa dónde debe ir el paréntesis de cierre. digamos que tengo una línea como
let cchar = s:cchar["atx"]
Está destinado a ser una línea de VimL, el lenguaje de scripting de vim, y (o algo así) ocurre en un archivo de sintaxis de Vim con el que actualmente no estoy de acuerdo. Digamos que quiero cambiar la parte derecha de esta expresión a una llamada de función, tal vez porque la función proporciona valores predeterminados cuando el diccionario s:cchar
aún no tiene asignado un valor para la "atx"
clave. Con mi cursor (en modo normal) en el primer carácter, 'l', podría escribir
f=wcf[MyFunction(<Esc>$r)
Brevemente, esto dice
f=
- Reenviar a '=' (podría haber dicho fs
, pero probablemente no me detendría el tiempo suficiente para ver que la 's' que quiero alcanzar es la primera s en la línea, así que iría por el personaje que es obviamente único, y continuar desde allí)
w
- siguiente palabra, ahora mi cursor está en la 's' de 's: cchar'
cf[
- cambiar para reenviar a '['
en este punto la línea se ve como
let cchar = |"atx"]
donde |
está el cursor, y estoy en modo de inserción. Luego escribo MyFunction(
y salgo del modo de inserción ( <Esc>
).
$
- mover el cursor al final de la línea. Podría haberlo utilizado E
para el final de la gran palabra o f]
para reenviar a ']' o alguna otra moción, pero $
se me ocurrió primero.
r)
- reemplace el carácter debajo del cursor con un ')'
Ahora he cambiado la expresión de asignación de asignar de un diccionario local de script a usar el valor de retorno de una función, y al hacerlo introduje paréntesis. No sé cómo se ve su necesidad particular de paréntesis, tal vez es muy diferente, en cuyo caso habrá una serie diferente de comandos para lograrlo. Si me detuviera a pensar más sobre mi ejemplo inventado, también podría encontrar formas más eficientes de lograrlo, pero quién tiene tiempo para detenerse y pensar.
(Inténtelo, copie y pegue (lo siento, tire y ponga) el texto y el comando en un búfer, y con el cursor en el primer carácter, 'f', del comando pulsado y$
. Ahora el comando está en su registro sin nombre. Muévase al comienzo de la primera línea y presione :normal <C-r>"
a) ingrese al modo de línea de comando, b) comience a ejecutar un comando de modo normal desde la línea de comando yc) pegue ( atchoo put) el registro sin nombre en la línea de comando como normal comando de modo a ejecutar. Lo único que necesita cambiar en el comando es reemplazar la <Esc>
serie falsa de caracteres (porque copió y pegó atchoo desde su navegador) con el código de la tecla Escape real, así que elimínelo y presione <C-v>
y luego su tecla Esc. Se verá algo así como^[
. Ahora presiona regresar para ejecutar el comando. O ... simplemente escriba la cadena de teclas para probar los comandos, solo quería mostrarle que también puede interactuar con el modo normal desde el modo cmdline, y <C-v>
, y <C-r>
, y todas las otras glorias de Wonderland. Además, ver :help Cmdline-mode
.)
3
Para eliminar una palabra al revés, puede usar la asignación estándar <C-w>
(ver :help i_Ctrl-w
). No sé si hay una asignación predeterminada para eliminar una palabra hacia adelante, pero supongo que podría hacer una con
inoremap <C-S-w> <C-o>dw
Nuevamente, lo <C-o>
sacará del modo de inserción para un comando único y dw
"eliminará" sobre el movimiento de "palabra". Ver :help d
, :help w
. Si las palabras de reenvío que elimina no son palabras reales sino nombres de class.function #, es posible que desee utilizar W
(ver :help W
). Si ya está principalmente en modo normal, no necesita estas asignaciones, solo sí dw
, db
o amigos.
Algunos capítulos de ayuda para ver más de cerca
:help <C-o>
:help Insert
:help f
y las siguientes secciones ( F
, t
, T
, ;
y ,
)
:help word-motions