Kirjoittaja Aihe: VIMiin automaattinen kommenttilootan generointi  (Luettu 1565 kertaa)

Stargazers

  • Käyttäjä
  • Viestejä: 549
    • Profiili
Tein tämmöisen pienimuotoisen funktion VIMiin, jolla saan generoitua
automaattisesti kommenttilaatikon joka valmiiksi lisää @param-kentät sekä @brief kentän Doxygeniä varten.

Eli kun tarvitsen C:llä/PHP:llä koodatessa funktioille generoida kommenttilaatikot, teen ne tällä jotta ne aina
olisivat samanlaiset keskenään. Ja toisaalta, myös laiskuus iskee eikä jaksa aina copy-pastettaa kommenttilaatikkoa
ja korvata oikeilla arvoilla, joten väänsin tälläisen :)

Sitten toki varoituksen sana: Jos tapanasi on käyttää vimissä rekisteriä y, muuta skriptiä siten että se käyttää eri rekisteriä.
Tällä hetkellä copy-pastet menee rekisterin y:n kautta! Jos taas et tiedä mitä rekisterit vimissä ovat, voit unohtaa äskeisen.

Pistä tämä koodi esimerkiksi tiedostoon auto_params.vim kansioon ~/.vim

Koodia: [Valitse]
function! CreateParamsList()

" Create array of parameters from register y
let Params_List = split( @y )

" Count number of parameters
let num_items = len( Params_List )

let i = 0
let new_tmp = ""

" Loop all parameters
while i < num_items

" Read parameter from current list index
let tmp = get( Params_List, i )

" If there is no , in this tmp variable, then
" we just add this tmp variable to new_tmp string
if match( tmp, "," ) == -1
let new_tmp = new_tmp . " " . tmp

" We found , char! No we echo @param line for Doxygen
" and clear our new_tmp string.
else
" Strip , char out from this string
let length = strlen( tmp )
let new_tmp = new_tmp . " " . strpart( tmp, 0, length -1 )
execute "normal i//\<TAB>@param" . new_tmp . "\<ESC>o//\<ENTER>"
let new_tmp = ""
endif

" Last char is ), so we stop when we reach list item
" what comes just before that ) char. Just print @param line now.
if i == num_items -1
execute "normal i//\<TAB>@param" . new_tmp . "\<ESC>o//"
endif

let i += 1
endwhile
endfunction

Sitten varsinainen abbreviation:
Koodia: [Valitse]
:ab com_ <ESC>jf(B"yywki// *********************************************<ENTER>//<TAB><ESC>"yp<ESC>o//<ENTER>//<TAB>@brief <ESC>o//<ENTER><ESC>j0f(l"yy/)<ENTER>k0<ESC>:call CreateParamsList()<ESC>o// *********************************************<ESC>

Itse käytän siten, että abbreviationit on tiedostossa ~/.vim/abbreviations.vim
Eli itse olen pastettanut ylläolevan pätkän sinne.

Sen jälkeen olen pistänyt ~/.vimrc tiedostoon kaksi source-riviä, eli
Koodia: [Valitse]
source ~/.vim/abbreviations.vim
source ~/.vim/auto_params.vim

Sitten kun olet pistänyt nuo käyttöön ja käynnistänyt vimin uusiksi (tai vaihtoehtoisesti vain käsin sourcettanut nuo...) niin käyttö on siten, että kirjoitat ensin funktion kuvauksen, esim:

Koodia: [Valitse]
int super_function( int x, char *dunno_lol, long wut )

Tämän jälkeen mene funktion yläpuoleiselle tyhjälle riville ja kirjoita com_ (huomaa alaviiva). Kun painat välilyöntiä ko. tekstin jälkeen,
pitäisi nyt koodissa olla tämän näköistä:
Koodia: [Valitse]
// *********************************************
// super_function
//
// @brief
//
// @param int x
//
// @param char *dunno_lol
//
// @param long wut
//
// *********************************************
int super_function( int x, char *dunno_lol, long wut )

Eli kuten huomaat, @return kenttää ei tule (ainakaan vielä) koska esim. PHP:ssä ei moisia ole samalla tapaa, joten tällä tapaa
on universaalimpi.

Sisennyksissä voipi teettää ongelmaa, mutta koska tämän olen tehnyt omaan käyttööni, niin se siinä toimii hyvin.

Saa pistää kommenttia ja palautetta, jos vaikka jotain iloa tästä jollekkin olisi.