¿Cómo puedo trabajar con divisiones en Vim sin Ctrl-W?


24

Mi terminal no me permite escribir Ctrl+ W, porque es un atajo para cerrar una pestaña de terminal.

Me gusta trabajar con divisiones, pero no puedo encontrar ninguna manera de hacerlo sin usar C-W. Esto me obligó a usar pestañas, porque puedo cambiar entre ellas con gt, gTo #gtdonde # es un número, pero me parece menos conveniente que las divisiones, ya que solo puedo ver el contenido de un archivo a la vez.

Tampoco puedo usarlo mouse=aya que mi terminal no lo admite.

¿Cómo puedo trabajar con divisiones en Vim sin el combo Ctrl+ Wdisponible?


1
Use asignaciones para wincmd Por ejemplo, puede asignar: :nmap wj :wincmd j<cr>actúa de la misma manera que CTRL-W j(muévase a la ventana a continuación) :help wincmd
Alex Kroll

@AlexKroll ¿Por qué no publicas eso como respuesta? :-)
Martin Tournoij

1
@Carpetsmoker Creo que no es una cobertura completa para este problema. CTRL-W jfunciona con contadores (vaya a la enésima ventana a continuación de la actual) mi solución no.
Alex Kroll

2
Normalmente no aprecio consejos como este, pero buscaría otra terminal. <C-W>es demasiado útil un atajo (no solo en muchos lugares en Vim, sino también en bash) para perderlo. Me gustaría saber qué otras combinaciones de teclas consume el terminal <C-T>. Por lo menos, investigaría si estos son configurables en la terminal.
tommcdo

Respuestas:


23

Puede reasignar <C-w>a otra combinación, por ejemplo:

:nnoremap <C-e> <C-w>

Ahora puede usar <C-e>y actuará como si hubiera presionado <C-w>.

Esto sobrescribirá la <C-e>asignación predeterminada (desplácese hacia abajo). Vim ya usa todas las teclas del teclado, y la única forma de evitar esto es usando la tecla líder, que actúa como un "prefijo":

:nnoremap <Leader>w <C-w>

A menos que haya reasignado <Leader>, ahora puede usar \w(uno después del otro). De hecho, prefiero esto ya que no me gustan las combinaciones de teclas CTRL +.

Ver ¿Qué es <Líder>? y ¿Cómo puedo averiguar en qué <Líder> está configurado? ¿Y es posible reasignar <Leader>? .


Resuelve mi problema Agregué la asignación a mi vimrc y probé un poco sin problemas.
Mateon1

13

De hecho, uso :wincmdmás a menudo que Ctrl+ Wporque me resulta más fácil escribir el abreviado :winc.

Por ejemplo, el equivalente a Ctrl+ W Les :winc l.


7

He configurado las siguientes reasignaciones en mi .vimrc:

nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

Ahora puedo usar Ctrl+hpara moverme a la ventana izquierda, Ctrl+lpara moverme a la ventana derecha, etc. Simplemente parece encajar lógicamente con la navegación normal de Vim.


44
Tenga en cuenta que el mapeo Ctrl + h en un terminal no siempre funciona, ya que esta suele ser la tecla de retroceso. Vea esta respuesta y esta pregunta .
Martin Tournoij

Además, puede usar nnoremap <cr> <c-w>w, ya que la tecla de retorno no se usa mucho en modo normal. Entonces es fácil pasar por las divisiones.
Esperanza

5

Para tratar las divisiones utilizo el complemento submode, que en realidad es bastante conveniente: le permite crear un nuevo modo ("modo" como en el modo normal, modo visual, modo de inserción, etc.) donde define nuevas combinaciones de teclas .

Con eso ya no tienes que usarlo Ctrl+wy, como estás en un nuevo modo, todas las teclas son libres de enlazar: no más problemas como "Maldición, no puedo encontrar una combinación de teclas que sea significativa y aún no esté asignada "

Puede instalar el complemento con cualquier administrador de complementos normal, y aquí hay algunos de mi configuración para darle algo de inspiración:


Creé un nuevo modo al que llamé WindowsModeen el que manipulo mis divisiones:

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

Estas líneas significan que entro en el modo con Leaderky salgo del modo con Leader: Después de presionar Leaderktodas las teclas que presiono:

  • No haga nada si no definí una asignación para ellos en este modo
  • Haz lo que decidí asignarles en este modo (ver el resto de la respuesta)
  • Regrese al modo normal si presiono Leader

Una vez que esté en WindowsModeestas líneas, hjklnavegue por las divisiones comoCtrl+whjkl

" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')

Usé estas líneas para dividir las ventanas con /y !:

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

Y qcerrar una división:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

Mueve las divisiones con Ctrlhjkl:

call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')

Vim-submode permite hacer muchas cosas poderosas, consulte el documento para obtener más detalles.


EDITAR Aquí se describe otro enfoque del submodo de la ventana . Creo que el método utilizado por el autor está aún más cerca de responder la pregunta: aquí se usa para crear un nuevo modo, pero todas las <c-w>somethingasignaciones están disponibles con las mismas teclas en el submodo:

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor

De esta manera todas las asignaciones <c-w>lowerCaseKey, <c-w>upperCaseKey, <c-w><c-Key>y las asignaciones de <c-w>=_+-<>los cuales son accesibles en el modo de ventana sin el prefijo<c-w>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.