2012-02-01 13 views
5

he mapeado Ctrl - j para mover a la memoria intermedia de abajo. Sin embargo, fue difícil mapear a otra cosa, así que tuve que escribir la primera fila a continuación para que se pueda mapear en todos.Mapeo <C-j> a algo en Vim

El siguiente script funciona a la perfección, excepto cuando escribo archivos .sh. Tengo plugin bash-support instalado.

let g:C_Ctrl_j = 'off' 
map <C-j> <C-w>j 

EDIT: Acabo de descubrir que el problema está en bash-support. Bash-support maps Ctrl - j para insertar el salto (o algo por el estilo) que mueve el cursor en un punto predefinido y va al modo de inserción. Supongo que cambiar eso en la secuencia de comandos bash-support hará el trabajo, aunque no me gusta jugar con esos archivos.

EDIT2: let g: C_Ctrl_j = 'off' realmente activa la característica de inserción de salto del complemento csupport.

Respuesta

6

Según the document of bash-support.vim:

El significado original de Ctrl-j es 'mover [n] líneas hacia abajo' (ver | CTRL-j |). Si está acostumbrado a usar el valor predeterminado y no le gustan estos objetivos de salto, puede desactivarlos. Pon la siguiente línea en el archivo '.vimrc':

Sea G: BASH_Ctrl_j = 'off'

Así que usted tiene que poner en su vimrc let g:BASH_Ctrl_j = 'off'.

Además, use nnoremap <C-j> <C-w>j en lugar de map <C-j> <C-w>j en su vimrc. Este último define las asignaciones de teclas en los modos Normal, Visual y Pendiente de operador. Las asignaciones de teclas también se expanden recursivamente. Podría causar problemas cuando defina más asignaciones de teclas.

5

Ctrl - j (0x0A) es un carácter especial, Line Feed.

Hay una buena probabilidad de que esta pulsación de tecla no está no está llegando a Vim como Ctrl - j (0x0A).

En Vim en una ventana Terminal.app en mi Mac, tecleando Ctrl - vCtrl - j pantallas ^@, (0x00 o nulo). Considerando Ctrl - vCtrl - g y Ctrl - vCtrl - display k^G y ^K, respectivamente.

me gustaría sugerir el uso de otra asignación (o simplemente entrenarse para usar Ctrl - wj).

+1

let g: C_Ctrl_j = 'off' Quita la asignación difícil de Ctrl-j a Line Feed. –

+1

¿De verdad? ¿Dónde está eso documentado? Lo probé con dos computadoras y no hace ninguna diferencia. – Johnsyweb

+2

http://lug.fh-swf.de/vim/vim-doc/csupport.html#csupport-Ctrl-j Esto es parte de la documentación de csupport que explica el rol de Ctrl-j en el complemento csupport. He leído sobre este remapeo en algún lugar hace unos meses y no tengo idea de dónde estaba. –

1

Trate asignaciones no recursivas,

nnoremap <C-j> <C-w>j 

debería hacerlo.

1

Tuve el mismo problema, pero por una razón diferente. VIM-LaTeX utiliza el complemento imaps.vim, que también es remaps some keys, que incluye Ctrl - j. Lo que funcionó para mí es establecer un autocmd en mi .vimrc:

augroup vimrc 
    au! 
    au VimEnter * unmap <C-j> 
    au VimEnter * noremap <C-j> <C-w>j 
augroup END 

El disparador VimEnter se asegura de que será ejecutada la de reasignación después de vim se pone en marcha, y los plug-ins son cargados (si he entendido bien), por lo que sobrescribe los mapas del complemento imaps.vim. El unmap no es necesario, pero no puede doler.