2011-07-01 10 views
68

sé que puedo usar ya sea:Mover al principio de la línea, mientras que en el modo Insertar

  1. Inicio en modo de inserción
  2. Esc + i para salir del modo de inserción y entrar en él de nuevo, yendo efectivamente al comienzo de la línea.

Pero ninguno me satisface. En el primer caso, tengo que inclinar la cabeza para golpear Inicio, porque no puedo golpearlo ciegamente. En el segundo caso mi brazo izquierdo tiene que salir de la fila de inicio para golpear Esc, que también es molesto.

¿Alguna idea?

+5

Puede usar 0 para ir al principio de la línea, pero eso no está en el modo de inserción. – manku

+2

Y si encuentra que Esc está demasiado lejos, puede usar Ctrl- [en su lugar :) –

+1

O mejor, Ctrl-C funciona como Esc. O mejor aún, asigne Bloq Mayús a Esc. –

Respuesta

121

Ctrl + O mientras está en modo de inserción lo pone en modo de comando solo para presionar una tecla. Por lo tanto Ctrl +O continuación Shift +I debe lograr lo que usted está buscando.

+0

Puedes lograr lo mismo presionando Ctrl + c, I o Ctrl + [, I. Ctrl + c es funcionalmente similar a ESC y Ctrl + [es equivalente a ESC. – sml

+34

O 'Ctrl-o' seguido de' 0' (ligeramente más eficiente que 'Ctrl-o' seguido de' Shift-I'), ya que volverás al modo insertar automáticamente. En algunos casos, 'Ctrl-o' seguido de'^'podría ser mejor (para pasar al primer carácter que no sea de espacio en blanco de la línea). – Jeet

+2

puede usar Alt-A o Alt-I mientras está en modo insertar si su tecla alt envía escape (se puede configurar en iTerm2) – Rivenfall

40

Puede ingresar el modo de inserción usando I (mayúscula i).

Pondrá el cursor al comienzo de la línea.

De manera similar, puede usar A para agregar algo al final de la línea.

Sin embargo, realmente no resuelve el problema de moverse mientras se está en modo Insertar.

Acabo de revisar la ayuda en el modo Insertar, no hay una combinación de teclas en el modo de inserción para mover al principio de la línea.

otra idea: Remap un nuevo comando sólo en el modo de inserción

inoremap <C-i> <Home>

+1

T. I funciona bien, pero estoy buscando la solución para pasar al principio de la línea mientras ya está en modo insertar. – Valentin

+0

Esto no responde la pregunta directamente, pero proporciona una funcionalidad que probablemente adelanta las preguntas para la mayoría de las personas. –

3

Si está utilizando MacOS Terminal vaya a Preferencias ...> Configuración> Teclado y mapear la tecla de finalización de Ctrl-O $ (se muestra como \ 017 $) y luego use fn + left para simular la tecla de finalización. Haga lo mismo con la tecla de inicio. Secuencia de escape \ 033 [H también funciona para el hogar.

+0

fn-Izquierda y fn-Derecha funcionaron por defecto para mí en vim en el terminal mac – Jeff

17

Tengo Ctrl + a y Ctrl + e mapeadas al principio y al final de la línea, respectivamente. Esto coincide con el comportamiento de la mayoría de las líneas de comando bash. Funciona bien para mi

inoremap <C-e> <Esc>A 
inoremap <C-a> <Esc>I 
+0

Si no me equivoco, estas son las combinaciones de teclas para la mayoría de los otros editores también. Voy a agregar estos a mi archivo vimrc. – Aaron

+2

Estos son los comportamientos habituales de Emacs. La mayoría de los navegadores también los admiten en varios tipos de campos de texto. No creo que sea una mala idea, pero esto es lo que se está perdiendo: '' copia/escribe el caracter bajo el cursor ('' para el cursor), '' inserte lo que haya en su.-Register (registro de puntos). Ese registro se llena con todo lo que acaba de escribir, cuando sale del modo de inserción (incluso cuando usa Ctrl-c (que por alguna razón no debería acostumbrarse)). –

+0

@Jonathan Cutrell ¿Cómo se va al comienzo de una nueva línea? – sayth

0

Un atajo que ha trabajado para mí (tanto la memoria muscular y la intuición) es para mapear __ (que es un doble _) para "insertar al inicio de la línea actual".

Justificación:

  • _ ya se va al inicio de la línea
  • en vim, duplicando nada es una forma muy común de hacer que "a esta línea"
  • doble _ no entre en conflicto con cualquier movimiento (ya está en el inicio de la línea)
  • su mano ya está en el lugar correcto si fue al principio de la línea y ahora desea insertar.

Vimscript:

"insert at start of current line by typing in __ (two underscores) 
function DoubleUnderscore() 
    if v:count == 0 && getcurpos()[2] == 1 
     :silent call feedkeys('I', 'n') 
    else 
     :silent call feedkeys('^', v:count + 'n') 
    endif 
endfunction 
nnoremap <silent> _ :call DoubleUnderscore()<CR> 

Es esta complicada debido a la fácil alternativa nnoremap __ _I hace que vim para retrasar al pulsar _ distinguir entre _ y __.

Cuestiones relacionadas