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 ++.
He estado adaptando mis complementos de vim durante dos años para apoyar el proyecto c ++ lo suficientemente grande. Puedes echarles un vistazo.
Utilizan ctags y cscsope.
http://www.vim.org/scripts/script.php?script_id=1638
http://www.vim.org/scripts/script.php?script_id=2507
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
Todo lo anterior y ...
código_completo: parámetro de función completo, fragmentos de código y mucho más.
taglist.vim: navegador de código fuente (compatible con C / C ++, java, perl, python, tcl, sql, php, etc.)
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.