2009-09-19 12 views
9

Estoy programando en C++ o Java. Así que quiero usar el editor de Vim, porque es muy flexible. He oído que puedo configurar el editor Vim para poder ir¿Es el editor de Vim muy inteligente?

  1. de un objeto a la definición
  2. de función para la definición
  3. del nombre de la clase a la definición

Do tenemos algún Vim-er profesional que pueda decirme exactamente cómo configurar Vim para eso? Gracias por adelantado.

P.S. En caso de que los lectores consideren que esta pregunta no está relacionada con la programación, diría que esto está mejorando la velocidad de programación. Entonces es una ayuda para el programador. Así que por favor no cierren esta pregunta.

EDITAR: También me gustaría saber cómo funciona vim con la finalización del código y ¿puedo indicar la lista de métodos que están disponibles para el objeto determinado? Si es así, ¿me gustaría saber cómo configurar estas opciones también?

+5

Por "profesional Vim-er", ¿te refieres a que te paguen por usar vim? Ese es un trabajo que me encantaría: P –

Respuesta

11

Lo que está buscando son etiquetas y etiquetas/archivos TAGS. Ctags (recomiendo Exuberant Ctags) es un programa que escanea los archivos fuente en busca de identificadores y crea un archivo que los indexa. Luego puede usar ^] para saltar a la definición de la etiqueta debajo del cursor.

Puede haber algunos detalles adicionales necesarios para decirle a vim cómo encontrar el archivo de etiquetas; No estoy seguro de lo que son. Pero esa es la idea general: ejecute ctags sobre su código fuente y luego use ^].

Alternativamente, es posible que desee ver GNU Global. Es un poco más sofisticado. Pero los ctags lograrán lo que usted ha descrito.

+1

Para llamar a vim donde está el archivo de etiquetas, use la opción de etiquetas. Escriba ": help 'tags'" en vim para obtener más detalles. –

1

Código finalización en vim está disponible como vim-scripts: http://www.vim.org/scripts/index.php

+1

Con la versión 7.0 y superior, puede completar automáticamente los nombres y las líneas de código en el modo de inserción usando combinaciones de teclas como ctrl-P, ctrl-N y ctrl-X-ctrl-L. La ayuda en línea tiene todos los detalles. –

-1

Sí, la herramienta que proporciona este índice del símbolo se llama ctags, y muchos editores de Unix puede utilizarlo. vim es agradable en la línea de comando, pero te sugiero pasar un poco de tiempo acostumbrándote a KATE. Es un editor de GUI muy agradable y moderno, con navegación de archivos estilo IDE, buen resaltado de sintaxis, el mejor envoltorio de palabras dinámico que he usado alguna vez, etc. Para java, probablemente vale la pena echarle un vistazo a eclipse y netbeans.

2

Vim es, sin lugar a dudas, el mejor editor del mundo (Ven a buscarme chicos de emacs). Dejando de lado las guerras de llama, lo que he encontrado increíblemente útil tanto para la programación en C++ como para Java es eclipse (el mejor IDE del mundo, sí, ahora estoy metiendo Netbeans) con el plugin vrapper. Obtiene todos los beneficios de un entorno de desarrollo totalmente integrado y el poder de los atajos de teclado de vim.

Vrapper no le da emulación de vim completa pero puede rebotar alrededor de su código usando accesos directos de vim y no perderá nada de la bondad del eclipse.

+1

Para variar los valores de "mejor" ... –

+0

En realidad, es para diferentes valores de "mundo", pero veo tu punto! –

1

ctags en general es la respuesta, como dijo Michael E. ctags *.c *.h es un comienzo simple para un proyecto que tiene todos los archivos en un directorio. Entonces, como dijo Michael, puede usar ^] para ir a la definición y^T para volver al lugar de donde vino. Estas son las mismas claves que usas para moverte dentro de la ayuda de Vim.

En Java y C++ es posible que tenga más de un método con el mismo nombre. :tn pasará a la siguiente, y :ts listará las alternativas.

Para completar el código en Vim, suelo usar^P y^N. No es sensible al contexto como el equivalente en Eclipse o MSVC, pero generalmente hace el trabajo.

Otras herramientas que puede considerar utilizar son cscope y (por supuesto) Emacs o Eclipse.

1

Como han dicho otros, necesita generar un archivo de índice para vi (m).

Solo quiero decir que usar vim para programar Java en lugar de un IDE moderno es como usar vim más una calculadora en lugar de una hoja de cálculo para los números. Ambos están bien para tareas pequeñas, pero cuando se escala, se llega a un punto en el que la hoja de cálculo simplemente deja el editor de texto atrás.

Si hace la programación java para ganarse la vida, hágase un favor a usted y a su empleador y aprenda a usar una herramienta eléctrica.

+3

vim 7.2 es compatible con números de punto flotante, por lo que no es necesario contar con una calculadora :) – intuited

+1

Intrigante. Simplemente no puedo adivinar para qué necesita un editor los números de coma flotante, así que tal vez esto es solo un paso más para tener una implementación ad hoc, informalmente especificada, llena de errores y lenta de la mitad de Common Lisp. –

2

Usar ctags es definitivamente el lugar para comenzar, pero no se olvide de cscope. En ambos casos, primero tiene que cscope y ctags escanean sus archivos de origen y crean sus bases de datos antes de iniciar vim. También debe actualizar ocasionalmente las bases de datos a medida que su código crece y cambia.

Con ctags, simplemente use el comando "ctags" en su directorio de códigos. Si tiene una jerarquía de directorios, comience en la parte superior y use "ctags -R" para volver a recurrir a través de todos los directorios a continuación. Inicie vim en el mismo directorio que el archivo de etiquetas resultante y vim debe encontrarlo y cargarlo automáticamente. Cuando esté en el editor con el cursor sobre una función o nombre de variable, puede escribir '^]' y vim debe saltar a la definición.

De forma similar, con cscope, use "cscope -b" o "cscope -b -R" para obtener información de etiqueta más detallada. Vim y cscope trabajan juntos para brindarle mucha más información, como dónde se utiliza un identificador y desde dónde se llama a una función. Existe un conjunto de macros que se pueden usar para acceder a la información. Puede encontrar las macros y sus significados en la información de ayuda de vim cscope.

2

La última vez que verifiqué, hace mucho tiempo, ctags estuvo bien, pero olvidó algunos identificadores, y cscope tenía una opción de búsqueda más exhaustiva, pero todavía faltó algunos identificadores.

grep es lo que prefiero. Es exhaustivo pero aún bastante rápido si la base del código fuente es de un tamaño razonable o la PC es rápida. Puede invocarlo desde vim con :grep. Aquí hay una versión simplificada de mi propio _vimrc para mostrar cómo lo configuro. Puse comentarios para explicar qué teclas hacen qué.

" for Windows, replace with the location of `grep.exe' 
" not needed for Unix/Linux 
:set grepprg=c:\prog\cygwin\bin\grep.exe\ -n\ $*\ /dev/null 


:function! RecursiveSearchIdentifierUnderCursor() 
: sp 
: let grep_cmd = "silent grep -r \"\\<" . expand("<cword>") . "\\>\" *" 
: exe grep_cmd 
:endfunction 


" CTRL-backslash to search for the identifier (or "word") under the cursor 
" 
" an identifier is in the form "xxx_123_yyy" but something in the form 
" "xxx_123_yyy.aaa_999" would be two identifiers separated by a period 
" 
" 
" this basically executes: 
" 
"  :grep -r "\<identifier\>" * 
" 
" for whatever `identifier' the cursor happens to be over 
" 
" 
" to close the newly opened window, use: 
" 
"  :q 
" 
:map <C-\> :call RecursiveSearchIdentifierUnderCursor()<CR> 


" cursor up/down to move to the previous/next search result 
:map <Up> :cp<CR>zz 
:map <Down> :cn<CR>zz 


" jump up/down between horizontally split windows 
:map <PageUp> <C-W>k 
:map <PageDown> <C-W>j 


" move to the previous/next enclosing brace 
:map <Left> [{ 
:map <Right> ]} 


" move to the previous/next enclosing parenthesis 
:map <Home> [(
:map <End> ]) 


" move to the previous/next enclosing # preprocessor directive 
:map <Insert> [# 
:map <Del> ]# 

Además, no se olvide * (SHIFT-8) y # (SHIFT-3) para buscar hacia adelante y hacia atrás para el identificador actual bajo el cursor dentro del archivo actual. Los he encontrado inestimables cuando saltaba a través del código, especialmente cuando buscaba nombres de variables cortas como 'i' y 'j' que de otro modo coincidirían con partes de otros nombres de variables en una búsqueda ciega en un editor de texto convencional.

También puede invocar :make desde vim si desea utilizar make. Se detendrá en el primer error de compilación, luego puede editar e iniciar de nuevo la compilación desde vim.

Una vez que se sienta cómodo definiendo sus propias funciones y asignaciones de teclas, hay muchas formas de simplificar las tareas de programación repetitivas con vim.

Cuestiones relacionadas