online metrologia mac for vim

metrologia - vim online



VIM-Cómo mapear Shift-Enter (5)

Estoy tratando de personalizar el comportamiento de la tecla Enter en el modo Normal en VIM. Aquí está mi .vimrc :

nmap <CR> o<Esc> nmap <S-CR> i<CR><Esc>

Estoy tratando de hacer que Enter simplemente agregue nueva línea después de la línea actual cuando se presiona. Sin embargo, si se presiona la combinación Shift-Enter , quiero romper la línea actual en el cursor.

Este último no funciona. Cada vez que presiono Shift-Enter , simplemente agrega la línea sin romperla en el cursor.


Debido a la forma en que la entrada del teclado se maneja internamente, lamentablemente no es posible hoy en la versión de terminal de Vim ( <S-CR> debería funcionar en GVIM en todas las plataformas, y en la consola de Windows Vim). Este es un punto de dolor conocido y el tema de varias discusiones sobre vim_dev y el canal de IRC #vim.

Algunas personas (principalmente Paul LeoNerd Evans) quieren arreglar eso (incluso para la consola Vim en terminales que lo soportan), y han lanzado varias propuestas, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Pero a partir de hoy, aún no se han presentado parches o voluntarios, aunque muchos han expresado su deseo de tener esto en una futura versión principal de Vim 8.

Nota sobre mapeo <CR> :

Si asigna <CR> en modo normal, interferirá con la selección de elementos de historial en la ventana de la línea de comandos y con saltar al error debajo del cursor en las ventanas de la lista de ubicaciones / quickfix / ubicación. (A menos que agregue lo siguiente :)

:autocmd CmdwinEnter * nnoremap <CR> <CR> :autocmd BufReadPost quickfix nnoremap <CR> <CR>

Nota sobre :nmap :

Debe usar :noremap ; hace que el mapeo sea inmune a la reasignación y la recursión.


Ingo Karkat y romainl son 100% correctos. Sin embargo, lo que estás preguntando es común, así que quiero darte algunas opciones.

Yo personalmente recomiendo usar el plugin Unimpaired de Tim Pope. Proporciona muchas asignaciones, pero las que buscará son [<space> y ]<space> que crean líneas en blanco arriba y debajo de la línea actual, respectivamente. Sin problemas, también proporciona agradables asignaciones para moverse a través de la lista de arreglos rápidos, la lista de búfer, la opción de alternar y muchas otras. Ver :h unimpaired para más.

Si no desea usar un complemento no dañado, como las asignaciones a continuación, hay algunas asignaciones rápidas para poner en su archivo ~/.vimrc :

nnoremap <silent> [<space> :<c-u>put!=repeat([''''],v:count)<bar>'']+1<cr> nnoremap <silent> ]<space> :<c-u>put =repeat([''''],v:count)<bar>''[-1<cr>


Logré corregir el código de clave de mi terminal para Shift + Enter enviando el código de clave que aparentemente Vim espera. Dependiendo de tu terminal, (¡Agregar Ctrl + Enter como bonificación!)

iTerm2 , abre PreferenciasPerfilesTeclas[+] (Agregar)

  • Método abreviado de teclado: (Hit Shift + Enter )
  • Acción: Enviar secuencia de escape
  • Esc + [[13;2u

    Repita para Ctrl + Enter , con la secuencia: [[13;5u

urxvt , .Xresources a tu archivo .Xresources :

URxvt.keysym.S-Return: /033[13;2u URxvt.keysym.C-Return: /033[13;5u

Alacritty , bajo key_bindings , agregue siguiente a su ~/.config/alacritty/alacritty.yml :

- { key: Return, mods: Shift, chars: "/x1b[13;2u" } - { key: Return, mods: Control, chars: "/x1b[13;5u" }


No puede asignar <S-CR> en CLI Vim, sin importar cuánto lo intente, porque Vim no puede distinguir <S-CR> de <CR> .

Debe encontrar otra asignación o seguir con GVim / MacVim.

editar

Algunos emuladores de terminal, como iTerm.app o Terminal.app en Mac OS X, le permiten configurar accesos directos para enviar secuencias de caracteres específicos al shell. Si tienes esa posibilidad, puede valer la pena probarla, pero te acostumbrarás rápidamente a un gyzmo específico de la plataforma que no puede ser portado, así que ... bueno, realmente no lo recomiendo.


También quería mapear <S-CR> y descubrí que no podía hacer que funcionara en el modo CLI hasta que agregué una segunda asignación usando Ctrl + V y luego <Shift + Enter> para la combinación de teclas asignada. Sin embargo, el mapeo <S-CR> todavía es necesario para que GVIm funcione como se espera. Esto representaría su fragmento de .vimrc de la siguiente manera:

nnoremap <CR> o<Esc> nnoremap <S-CR> i<CR><Esc> " Needed for GVIm nnoremap ^[0M i<CR><Esc> " Needed for CLI VIm (Note: ^[0M was created with Ctrl+V Shift+Enter, don''t type it directly)

Probé esto en Ubuntu 12.04. Feliz Vimming!