uso seleccionar que puede hacer editar con cambiar archivo vim window buffer

seleccionar - uso del editor vim



Atajo para moverse entre ventanas Vim (6)

Digamos que tengo una sola pestaña Vim que muestra 9 buffers (igualmente separados, como una tabla 3x3). Actualmente, para pasar de la ventana superior izquierda a la inferior derecha, tengo que presionar 3 , Ctrl + W , J y luego 3 , Ctrl + W , L. Esto es engorroso y me gustaría poder presionar Ctrl + 9 para ir a la 9ª ventana y Ctrl + 3 para ir a la 3ª ventana, etc. ¿Hay alguna manera fácil de asignar algo como esto en Vim?


Ermmm ... Estoy bastante seguro de que esto no mantendrá el diseño de la ventana como está, pero uso

:buf sys

para ir a system.h,

:buf Sing

para ir a MyLargeNamedClassSingleton.cpp

buf hará autocompletar (posiblemente, si se configura, si está configurado) para que pueda hacer

:buf part<Tab>

para enumerar qué archivos podrían coincidir con la part que escribió. Supera a la mierda de navegar por los buffers de todo.

Pero entiendo, esto no responde a su pregunta específica, por supuesto :)


Hay una solución mucho más simple que usar el mouse o las asignaciones de movimiento definidas; se romperán si las numeraciones de las ventanas son diferentes de las que tiene en mente para una matriz de 3x3, o si decide trabajar con menos de 9 ventanas. Así es cómo:

Incluye lo siguiente en tu .vimrc :

let i = 1 while i <= 9 execute ''nnoremap <Leader>'' . i . '' :'' . i . ''wincmd w<CR>'' let i = i + 1 endwhile

Ahora solo puede presionar <Leader><number> y acceder al número de ventana que desee. No recomendaría ir más allá de 9, porque IMO, la utilidad de tener múltiples ventanas de visualización sigue una distribución de Rayleigh y rápidamente se vuelve inútil con demasiadas vistas en una ventana.

Será útil si tiene el número de la ventana en su statusline de statusline para ayudarlo a determinar rápidamente en qué ventana está y a qué ventana quiere ir. Para hacer eso, usa esta pequeña función y agrégala como corresponda en tu statusline .

function! WindowNumber() let str=tabpagewinnr(tabpagenr()) return str endfunction

Véalo en acción en su statusline :

set laststatus=2 set statusline=win:%{WindowNumber()}

Tenga en cuenta que la línea anterior reemplazará su statusline . Solo estaba destinado a fines ilustrativos, para mostrar cómo llamar a la función. Debe colocarlo donde crea que sea apropiado en su statusline . Así es como se ve la mía:

EDITAR:

romainl preguntó por mi línea de estado en los comentarios, así que aquí está:

"statusline hi StatusLine term=bold cterm=bold ctermfg=White ctermbg=235 hi StatusHostname term=bold cterm=bold ctermfg=107 ctermbg=235 guifg=#799d6a hi StatusGitBranch term=bold cterm=bold ctermfg=215 ctermbg=235 guifg=#ffb964 function! MyGitBranchStyle() let branch = GitBranch() if branch == '''' let branchStyle = '''' else let branchStyle = ''git:'' . branch end return branchStyle endfunction function! WindowNumber() let str=tabpagewinnr(tabpagenr()) return str endfunction set laststatus=2 set statusline=%#StatusLine#%F%h%m%r/ %h%w%y/ col:%c/ lin:%l/,%L/ buf:%n/ win:%{WindowNumber()}/ reg:%{v:register}/ %#StatusGitBranch#%{MyGitBranchStyle()}/ /%=%#StatusLine#%{strftime(/"%d/%m/%Y-%H:%M/")}/ %#StatusHostname#%{hostname()}

La última línea debe ser una sola línea (tenga cuidado si su configuración la divide automáticamente en varias líneas). Sé que hay maneras de mantenerlo organizado con uniones de cadena incrementales en cada paso, pero soy demasiado vago para cambiarlo. :) La función GitBranch() (con otras capacidades de git) es proporcionada por el complemento git.vim . Hay un error en él como se indica here y uso el fork con la corrección de errores . Sin embargo, estoy dejando ambos enlaces y el blog aquí para dar crédito a todos.

Además, tenga en cuenta que utilizo un fondo oscuro, por lo que es posible que tenga que cambiar un poco los colores si está utilizando un esquema de luz (y también para adaptarse a sus gustos).


Me gusta moverme con las teclas de flecha.
Asigno ctr + direction para mover a la siguiente partición de la ventana en esa dirección.

map <C-UP> <C-W><C-UP> map <C-DOWN> <C-W><C-DOWN> map <C-LEFT> <C-W><C-LEFT> map <C-RIGHT> <C-W><C-RIGHT>

No puedes saltar directamente de una ventana a otra, pero me parece que es muy fácil moverse entre ventanas


No es exactamente lo que está buscando, pero si está utilizando un terminal que lo admite, puede configurar las siguientes opciones:

:set mouse+=a :set ttymouse=xterm2

y haga clic en un búfer para cambiar a él. Sí, con el ratón.

Un montón de otros comportamientos del ratón también funcionan: puede hacer clic para mover el punto de inserción, arrastrar para seleccionar texto o cambiar el tamaño de las divisiones, y usar la rueda de desplazamiento.


Prefiero usar las teclas vim estándar (jkhl).

noremap <C-J> <C-W>w noremap <C-K> <C-W>W noremap <C-L> <C-W>l noremap <C-H> <C-W>h

Hay un truco si te das cuenta de que los dos primeros mapas pueden saltar hacia la derecha o hacia atrás, en lugar de saltar hacia arriba o hacia abajo.

Y también puede cambiar a cualquier ventana directamente con <Number><CJ> , por ejemplo, 2<CJ> irá a la 2ª ventana.


Mejor, respuesta más general:

Use conteo Ctrl + w Ctrl + w para saltar a la ventana de conteo debajo / derecha de la actual.

Por ejemplo, si estás en la parte superior izquierda de una cuadrícula de 3x3 y quieres saltar a la parte inferior izquierda, utilizarías 7 Ctrl + w Ctrl + w .

Respuesta específica a la cuadrícula de 3x3 :

Si siempre estás usando un diseño de 3x3, puedes probar estas asignaciones para el teclado numérico, que siempre salta a la parte superior izquierda y luego mueve la cantidad adecuada desde allí, con la posición de la tecla en el teclado saltando a la ventana con la posición ''equivalente'' en la pantalla:

noremap <k7> 1<c-w><c-w> noremap <k8> 2<c-w><c-w> noremap <k9> 3<c-w><c-w> noremap <k4> 4<c-w><c-w> noremap <k5> 5<c-w><c-w> noremap <k6> 6<c-w><c-w> noremap <k1> 7<c-w><c-w> noremap <k2> 8<c-w><c-w> noremap <k3> <c-w>b

Editado: resulta que cw cw va a la parte superior izquierda al inicio automáticamente. El 1 explícito se requiere en la primera asignación, ya que cw cw sin cuenta alterna entre la ventana actual y la seleccionada previamente.

(La asignación Ctrl-W t siempre va a la ventana más a la izquierda superior, la asignación Ctrl-W b siempre va a la parte inferior derecha).

Alternativamente, puede asignar cada número para saltar a la ventana Nth, por lo que k6 sería 6 cw cw, en lugar de tratar de colocar las teclas como en la pantalla.