2011-02-02 4 views
2

Je dois exécuter des commandes vim sur des milliers de fichiers sans souffrir de la lenteur du mode interactif. J'ai essayé:Exécution de commandes vim sans mode interactif

 
    find ... | xargs vim '+set fileencoding=utf-8 | x' 

et

 
    for file in ... ; do 
     vim '+set fileencoding=utf-8 | x' $file 
    done 

mais il est trop lent et j'ai mises en garde

 
Vim : Warning : Output is not to a terminal 

Est-il impossible d'éviter le mode interactif dans vim?

ps: je peux utiliser autrement iconv, mais il provoque des erreurs avec des fichiers> 32 ko

 
    iconv --from-code=ISO-8859-1 --to-code=UTF-8 $file -o $file 
+0

"mais il provoque des erreurs avec des fichiers> 32 ko" - Est-ce supposé lire "kb" au lieu de "ko"? –

Répondre

3

je ferais:

find .... -print0 | xargs -0 vim -c 'argdo set fenc=utf8' -c 'wqa' 
+0

Ma commande find complète est 'find -exec file -i {} \; | grep iso-8859 | awk -F ':' '{print $ 1}' ', donc' -print0 | xargs -0' est difficile. Avec la redirection par 'xargs vim -c 'argdo set fenc = utf8' -c 'wqa'' le terminal se comporte bizarrement (caractères d'échappement de vim?). Mais dans une boucle for, ça marche plutôt bien. Merci pour la réponse –

1

Type de fichier, la syntaxe et les plugins indent sont probablement ce qui vous ralentit vers le bas. Ceux-ci sont spécifiés dans votre ~/.vimrc avec une ligne qui ressemble généralement à:

filetype plugin indent on 
  • Vous pouvez essayer de commenter que sur ou
  • Vous pouvez commencer vos plugins sans Vim et ~ /. vimrc mais rester en mode nocompatible en faisant:

    vim -Nu AUCUN

+0

Cela fonctionne bien aussi. Merci pour la réponse. –