2010-01-26 4 views
4

J'ai trouvé quelques discussions à ce sujet, mais ils ont 3 ans. Quelqu'un at-il un plugin à recommander pour vim que lorsque je tape { il fera:Vim plugin aide: Insertion automatique bracet de fermeture avec le curseur au milieu

{ 
::cursor here:: 
} 

une autre chose utile est de savoir si je tape if il fera:

if(::cursor here::) 

Merci

+0

Je suis curieux de savoir ce plugin (de préférence universel). Pour l'instant j'avais l'habitude de taper '{} <^O> O' pour obtenir le même effet – MBO

+0

Qu'est-ce que cela a à voir avec Bash? –

Répondre

2

Découvrez le plugin snipMate. C'est très personnalisable. Il y a un excellent screen-cast montrant le plugin en action.

Par exemple en C avec plugin snipMate.

if<Tab> 

would produce: 

if (::cursor:1::) { 
    ::cursor:2:: 
} 

Première <Tab> laisserait le curseur à :: curseur: 1 :: et seconde <Tab> prendriez-vous à :: curseur: 2 ::.

Il devrait y avoir quelque chose de similaire pour les scripts bash dans snipMate, sinon il est très simple d'en ajouter un.

+0

Très utile .. Semble avoir quelques problèmes en mettant en place un {trigger comme ci-dessus (sans avoir besoin d'une instruction for ou similaire) Avez-vous eu de la chance ou avez-vous simplement utilisé les snippets fournis? – stormist

+0

J'utilise habituellement ceux par défaut. Mais j'ai essayé d'ajouter un extrait pour "{", ça a marché. J'ai ajouté cet extrait http://vim.pastey.net/132128 à ~/.vim/snippets/sh.snippets (extraits de script Shell). – shoban

1

J'utilise le code suivant (php-templates):

function! EatChar() 
    let l:char=getchar(0) 
    return '' 
endfunction 

inoreabbrev function_ function <ESC>maa()<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev if_ if (<ESC>maa)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev ifelse_ if (<ESC>maa)<CR>{<CR><CR>}<CR>else<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev for_ for (<ESC>maa; ;)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev foreach_ foreach (<ESC>maa as $key=>$value)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev while_ while (<ESC>maa)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev <? <?php <ESC>maa ?><ESC>`aa<C-O>:call EatChar()<CR> 
1

This article montre une solution simple et a des liens vers certains qui sont plus robustes.

Voici une partie de la solution de cette page:

inoremap {  {}<Left> 
inoremap {<CR> {<CR>}<Esc>O 
inoremap {{  { 
inoremap {}  {} 
1

Il y a beaucoup de plugins et ftplugins qui fait le travail. La plupart du temps, les nouveaux plugins ne sont pas meilleurs car ils réinventent souvent la roue sans tenir compte des cas particuliers.

Dans le texte « vieux », j'ai:

  • My code bracketing system qui simplifie la définition des applications visant à insérer paire équilibrée de caractères de supports ressemblant.
  • et related functions qui visent à simplifier la tâche de définition des extraits de code évolués (*) (généralement les instructions de contrôle). J'ai des exemples d'utilisation pour C++.

(*) L'extension des applications/abréviations est empêché dans le contexte commentaires/cordes, plusieurs formes environnantes des instructions de contrôle-C sont fournis, et quelques options stylistiques sont également pris en charge (dans le cas du C instructions de contrôle, elles sont faciles à transposer dans d'autres langues)

3

J'utilise delimiteMate.vim. Il gère cela de manière configurable et non ennuyante.

0

Si vous n'avez pas besoin de la puissance de divers plugins d'extraits de texte (ou si vous ne voulez pas savoir comment le configurer selon vos besoins) et que vous n'avez que quelques modèles simples (un ou deux), vous pouvez il suffit d'enregistrer sa création et de le mapper en raccourci.

Par exemple,

:nmap <leader>b o{<cr>}<esc>O 
Questions connexes