stop vim ctags vim-macros

stop - vim q command



Consejos y trucos de Vim y Ctags (15)

Acabo de instalar Ctags (para ayudar con el desarrollo de C ++) con mi Vim (o más bien gVim), y me gustaría conocer sus comandos favoritos, macros, accesos directos, consejos que lo acompañan ...

Comparte tu mejor arsenal. ¿Qué otros complementos de Vim recomendarías para C ++ en el desarrollo de Vim?

EDITAR ¿Qué otro complemento usarías junto con Ctags?

EDIT2 ¿Qué versión de gVim usas con las etiquetas? ¿Hace alguna diferencia?

EDIT3 ¿Cómo mejora su experiencia de programación para proyectos grandes y pequeños?


Adapté la función de búsqueda SetTags () anterior (que debería ser reemplazada por las set tags+=./tags;/ equivalentes set tags+=./tags;/ ) para trabajar con cscope. ¡Parece funcionar!

"cscope file-searching alternative function SetCscope() let curdir = getcwd() while !filereadable("cscope.out") && getcwd() != "/" cd .. endwhile if filereadable("cscope.out") execute "cs add " . getcwd() . "/cscope.out" endif execute "cd " . curdir endfunction call SetCscope()


El comando que más uso es C-] que salta a la definición de la función debajo del cursor. Puedes usarlo más seguido para seguir más llamadas. Después de eso, Co te traerá de vuelta a un nivel, Ci profundizará de nuevo.


He encapsulado la manipulación de etiquetas en un plugin experimental mío.

Con respecto al desarrollo de C ++ en vim, ya he respondido there : uso mi propia suite y algunos otros complementos.


He encontrado que el complemento de lista de taglist es imprescindible. Enumera todas las etiquetas que conoce (archivos que ha abierto) en una ventana separada y hace que sea muy fácil navegar por archivos más grandes.

Lo uso principalmente para el desarrollo de Python, pero solo puede ser mejor para C / C ++.



Otra iteración en la función SetCscope () anterior. Eso establece cscope pre-path para obtener coincidencias sin estar en el directorio donde "cscope.out" es:

function s:FindFile(file) let curdir = getcwd() let found = curdir while !filereadable(a:file) && found != "/" cd .. let found = getcwd() endwhile execute "cd " . curdir return found endfunction if has(''cscope'') let $CSCOPE_DIR=s:FindFile("cscope.out") let $CSCOPE_DB=$CSCOPE_DIR."/cscope.out" if filereadable($CSCOPE_DB) cscope add $CSCOPE_DB $CSCOPE_DIR endif command -nargs=0 Cscope !cscope -ub -R & endif


Otro complemento útil para el desarrollo de C es cscope Al igual que Ctags le permite saltar a las definiciones, Cscope salta a las funciones de llamada .

Si tiene cscope en su directorio ~ / bin /, agregue lo siguiente a su .vimrc y use g ^] para ir a la función de llamada (consulte: help cscope).

if has("cscope") set csprg=~/bin/cscope set csto=0 set cst set nocsverb " add any database in current directory if filereadable("cscope.out") cs add cscope.out " else add database pointed to by environment elseif $CSCOPE_DB != "" cs add $CSCOPE_DB endif endif

Casi lo olvido ... Al igual que ctags, debe generar (y actualizar periódicamente) la base de datos. Yo uso el siguiente script

select_files > cscope.files ctags -L cscope.files ctags -e -L cscope.files cscope -ub -i cscope.files

Donde ''select_files'' es otro script que extrae la lista de archivos de encabezado y C del Makefile. De esta manera, indexo solo los archivos realmente utilizados por el proyecto.


Pongo lo siguiente en mi archivo .gvimrc, que busca en el árbol desde cualquier punto un archivo de etiquetas cuando se inicia gvim:

function SetTags() let curdir = getcwd() while !filereadable("tags") && getcwd() != "/" cd .. endwhile if filereadable("tags") execute "set tags=" . getcwd() . "/tags" endif execute "cd " . curdir endfunction call SetTags()

Luego, periódicamente regenero un archivo de etiquetas en la parte superior de mi árbol de origen con una secuencia de comandos que se ve así:

#!/bin/bash find . -regex ".*/./(c/|h/|hpp/|cc/|cpp/)" -print | ctags --totals --recurse --extra="+qf" --fields="+i" -L -


Puede agregar directorios a su búsqueda ctags. Por ejemplo, tengo un índice ctags creado para Qt4, y tengo esto en mi .vimrc:

set tags+=/usr/local/share/ctags/qt4



Una línea que siempre va en mi .vimrc:

set tags=./tags;/

Esto buscará en el directorio actual las "etiquetas", y trabajará el árbol hacia la raíz hasta que se encuentre una. IOW, puedes estar en cualquier lugar de tu árbol de origen en lugar de solo la raíz de él.


Utilizo ALT-left y ALT-right para hacer pop / push desde / hacia la pila de etiquetas.

" Alt-right/left to navigate forward/backward in the tags stack map <M-Left> <C-T> map <M-Right> <C-]>

Si usa hjkl para el movimiento, puede asignar <Mh> y <Ml> lugar.


Utilizo vim en macos, y los ctags originales no funcionan bien, así que descargo el último y configuro make make install it. Instalo ctgas en / usr / local / bin / ctags (para mantener el original)

"taglist let Tlist_Ctags_Cmd = "/usr/local/bin/ctags" let Tlist_WinWidth = 50 map <leader>ta :TlistToggle<cr> map <leader>bta :!/usr/local/bin/ctags -R .<CR> set tags=tags;/ map <M-j> <C-]> map <M-k> <C-T>


Ctrl + ] - ir a definición
Ctrl + T - Saltar atrás de la definición.
Ctrl + W Ctrl + ] - Abra la definición en una división horizontal

Añade estas líneas en vimrc
map <C-/> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

Ctrl + / - Abre la definición en una nueva pestaña
Alt + ] - Abre la definición en una división vertical

Después se generan las etiquetas. Puede usar las siguientes teclas para etiquetar y etiquetar funciones:

Ctrl + Left MouseClick - Ir a definición
Ctrl + Right MouseClick - Saltar atrás de la definición


Varias definiciones del mismo nombre.

<Cw>g<C-]> abre la definición en una división, pero también lo hace :tjump que va a la definición o, si hay varias definiciones, te presenta una lista de definiciones para elegir.