Pregunta:
Estoy tratando de mejorar mi capacidad para moverme dentro de archivos en vim, especialmente usando asignaciones / comandos incorporados. Edito muchos tipos diferentes, incluidos shell, markdown, Python, etc. Estoy familiarizado con las teclas {
y }
, que se mueven entre párrafos (de hecho, cualquier cosa con líneas en blanco que los separen, lo cual es útil incluso al escribir código), así como otras claves, por supuesto.
Sin embargo, estoy leyendo acerca de las teclas [[
, []
, ][
y ]]
, que parecen diseñadas para moverse entre 'secciones' . Sin embargo, leer sobre las secciones de la documentación de vim no ayuda mucho; parece estar escrito en términos de 'nroff', con el que estoy vagamente familiarizado, pero no es un formato de archivo del que realmente sé mucho o uso. Ninguno de los tipos de archivo con los que trato parece reconocer esas asignaciones / claves.
Esto me hace pensar que sería útil reutilizarlos / volver a vincularlos. Sin embargo, ¿hay algún significado no específico de nroff para una sección? Si es así, ¿cómo puedo explotarlo / utilizarlo / activarlo?
Respuesta:
El uso inicial de estos mapeos es navegar entre funciones en archivos C como se dice en la :h section
(tenga en cuenta que no es el mismo tema que :h 'sections'
que vinculó en su pregunta)
The "]" and "[" commands stop at the '{' or '}' in the first column. This is useful to find the start or end of a function in a C program.
Así que esta es la definición de la sección tal como la entiende Vim: un número arbitrario de líneas delimitadas por corchetes en la primera columna de una línea.
Tenga en cuenta que es solo si los caracteres de corchetes curvos están en la primera columna como en este código:
int main()
{
printf("Hello, World!");
return 0;
}
Si su código no sigue esta convención, la ayuda recomienda reasignar las teclas para que busquen corchetes en cualquier parte de la línea:
If your '{' or '}' are not in the first column, and you would like to use "[["
and "]]" anyway, try these mappings:
:map [[ ?{<CR>w99[{
:map ][ /}<CR>b99]}
:map ]] j0[[%/{<CR>
:map [] k$][%?}<CR>
Esto es mejor, pero no ideal, por lo que a veces es una buena idea reasignarlos para lograr el mismo propósito (por ejemplo, navegar entre funciones) pero para diferentes tipos de archivos. Un ejemplo está en el ftplugin de vim
estándar enviado con vim y neovim:
nnoremap <silent><buffer> [[ m':call search('^\s*fu\%[nction]\>', "bW")<CR>
vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "bW")<CR>
nnoremap <silent><buffer> ]] m':call search('^\s*fu\%[nction]\>', "W")<CR>
vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "W")<CR>
nnoremap <silent><buffer> [] m':call search('^\s*endf\%[unction]\>', "bW")<CR>
vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf\%[unction]\>', "bW")<CR>
nnoremap <silent><buffer> ][ m':call search('^\s*endf\%[unction]\>', "W")<CR>
vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf\%[unction]\>', "W")<CR>
En cualquier búfer con un tipo de archivo vim
los mapeos navegarán a través de la función gracias a búsquedas basadas en la function
palabras clave y function
endfunction
(y su versión corta).
Varios otros complementos hacen esto, pero también puede hacerlo usted mismo para sus tipos de archivo favoritos.
Después de una búsqueda rápida en los archivos de tiempo de ejecución estándar, encontré que Vim reasigna estas claves para los siguientes tipos de archivo:
- abaqus
- cobol
- contexto
- eiffel
- hámster
- j
- mf
- mp
- pitón
- rubí
- óxido
- empuje
- Zimbu