2009-05-05 10 views
6

No sé si esto es posible en absoluto, pero aún así ... no hay problema en preguntar.Can Vim do Fortran finalización de los argumentos de la subrutina

Estoy usando Vim para editar archivos fortran, viejos y nuevos (.for y .f90). Estoy intentando conseguir la finalización, algo por el Visual Studio, para que cuando tengo varias subrutinas definidas en un archivo:

subroutine init (ibc, nquad, ul, ur, xl, xr) 
subroutine output (f, ibc, indx, nsub, nu, ul, ur, xn) 
subroutine phi (il, x, phii, phiix, xleft, xrite) 

y yo los llame a alguna parte:

call init(<cursor is here> 

consigo la lista de argumentos, así que no tengo que recordarlos. Si entendí bien, VS llama a esto "Intellisense".

¿Hay algo similar disponible en Vim (GVim72) y si es así, cómo hacerlo funcionar? Cualquier consejo apreciado.


ldigas edición: También habría satisfecho si pudiera conseguir la línea de declaración, como para decir, cuando escribo:

call init(<cursor is here> 

y pulse la tecla de finalización, Vim golpes en toda la línea, por ejemplo

call init(ibc, nquad, ul, ur, xl, xr) 

ldigas Edit2: 2 respuestas retirados hasta ahora ... interesante.


Respuesta

3

El más cercano debe ser vim intellisense. Desafortunadamente, todavía no es compatible con Fortran ...

+0

Sí, lo vi mientras buscaba en Google. Desafortunadamente, como dijiste, no ayuda. También encontré gente mencionando algunas otras alternativas (más vim como) aquí y allá, pero nada relacionado con fortran. Esperando que alguien más sepa más ... – Rook

2

Creo que lo más parecido que puede obtener es una función vim que funciona de manera similar a intellisense, pero usemos el archivo de resaltado de sintaxis como base. Echa un vistazo a mi archivo .vimrc aquí para ver un ejemplo. Básicamente configura autocompletar para cada uno de los tipos enumerados: si el tipo de archivo es compatible con omnisense, lo usa, de lo contrario, utiliza el archivo de resaltado de sintaxis.

syntax on 
colorscheme elflord 
set tabstop=4 
set shiftwidth=4 
set nu! 
set et! 
filetype on 
filetype plugin on 
autocmd FileType python set omnifunc=pythoncomplete#Complete 
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS 
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags 
autocmd FileType css set omnifunc=csscomplete#CompleteCSS 
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags 
autocmd FileType php set omnifunc=phpcomplete#CompletePHP 
autocmd FileType sql set omnifunc=sqlcomplete#Complete 
autocmd FileType c set omnifunc=ccomplete#Complete 
if has("autocmd") && exists("+omnifunc") 
    autocmd Filetype * 
     \ if &omnifunc == "" | 
     \  setlocal omnifunc=syntaxcomplete#Complete | 
     \ endif 
endif 

Otra posibilidad es buscar en el sitio web vim.org.Por ejemplo, me encontré con el siguiente allí (aunque no es exactamente lo que estás buscando es sólo un ejemplo)

fortran_codecomplete.vim : Complete fortran constructs with

Esperanza esto ayuda

+1

Desafortunadamente, onmnifunc no parece funcionar con fortran tan bien. Al menos no de la manera que lo necesito. En cuanto a la segunda parte, conozco el complemento de Michael Goerz, pero no es lo que necesito. Lo que hizo fue crear un complemento, una especie de complemento de fragmentos. Hay muchos alrededor, snipmate, xptemplate ... solo por nombrar algunos. Para resumir, no hay suerte aquí. Aún así aprecio el esfuerzo. – Rook

3

respuesta parcial:

Okey, tengo la primera parte:

Completa línea de Vim se llama por

<Ctrl-X, Ctrl-L> 

(si es en un mismo archivo, el cual, por cierto, muy a menudo no lo es)

Desafortunadamente, si una declaración de subrutina se parece

call assemble (adiag, aleft, arite, f, h, indx, nl, node, nu, nquad, & 
nsub, ul, ur, xn, xquad) 

(donde "&" es una marca de continuación) de esa manera no funcionará. ¿Alguien (viene en vimmers de scripting) sabe de una manera de evitar este comportamiento?

2

rápida & sucio: Exuberant CTAGS

VIM entiende muy bien las etiquetas. Desafortunadamente, este no es el comportamiento resbaladizo que pareces querer: terminarás rebotando entre ventanas, pero pensé que era maravilloso dado que no tenía nada más.

Lo que puede funcionar es Photran, pero nunca lo he usado. Sin embargo, dado que es de código abierto y configurable, es posible que encuentre a alguien que ya se haya ido por el camino que está recorriendo, por ejemplo, parece haber un VIM plugin. YMMV.

+1

Actualmente también uso ctags, funciona bien pero, de hecho, rebotar entre las ventanas es molesto. El autocompletado como OP sugiere es muy bueno, pero solo encontré eso para C++. – steabert

Cuestiones relacionadas