2010-03-11 8 views
0

Je suis récemment converti vimVim: l'édition multi-fichiers - ayant différentes marques dans différentes divisions

J'aime la commande :make dans vim et l'utiliser largement, (de fantaisie comme IDEs Eclipse.) mais j'aime aussi modifier plusieurs projets (avec makefiles séparés.)

Donc, en général à modifier plus d'un projet, je le ferai

pushd project1 
vim project1.cpp 
[suspend signal] 
pushd ../project2 
vim project2.cpp 

et maintenant je peux passer entre les deux projets avec ctrl+z-à-dire signal de suspension et fg.

Lorsque cela devient un problème, c'est quand je veux ouvrir un projet dans le contexte d'un autre afin que je puisse copier/coller. Donc, si au lieu de ce qui précède je fais

pushd project1 
vim project1.cpp 
:vsp ../project2/project2.cpp 

Je peux modifier simultanément les deux dans le même processus vim, mais je ne peux pas construire efficacement un ou l'autre avec la commande :make, il ne bâtirai projet 1.

Est-ce que quelqu'un a une sorte de schéma qui leur donne le meilleur des deux mondes: être capable de modifier simultanément tout en étant capable de construire plusieurs projets avec la commande :make tous à partir du même processus vim?

Répondre

2

Les commandes make que vous voulez exécuter sont-elles les mêmes pour chacune? Donc le problème est juste le répertoire courant? Vous pouvez utiliser :lcd pour modifier le répertoire uniquement pour la fenêtre en cours, afin qu'il s'exécute dans le répertoire approprié pour chacun. Pour rendre cela plus automatique, vous pouvez configurer une autocommande (sur BufWinEnter, je pense) pour quand vous créez cette fenêtre fractionnée pour exécuter :lcd expand('%:h'), ou simplement mapper une clé à cela si vous ne voulez pas toujours le faire.

(Vous pouvez également mapper une clé/créer une commande personnalisée pour une combinaison des lcd et make, probablement économiser de frappes mais cd'ing inutilement avant chaque faire. Non pas que cela prend longtemps.)

post-scriptum La raison pour laquelle j'ai demandé si les commandes make étaient les mêmes est que vous pouvez définir makeprg et d'autres options associées localement (utilisez :setlocal au lieu de :set).

+0

génial c'est ce que je cherchais! – ldog

1

vim commande « :make exécute vraiment juste le programme configuré comme makeprg dans le répertoire courant (make par défaut). En démarrant chaque processus vim dans un répertoire de projet, vous définissez indirectement le répertoire en cours pour cette session vim, mais vous pouvez bien sûr changer le répertoire courant dans une session en cours, par ex. lorsque vous avez commencé à project1/ vous pouvez simplement cd à project2/ et construire à l'intérieur vim avec

:cd project2 
:make 

ou comme si vous seulement ce qu'il faut changer le répertoire de la fenêtre actuelle, faire ce que Jefromi suggère

:lcd project2 
:make 

Il y a des plugins qui disent qu'ils rendent cela plus facile (this on a l'air d'être populaire), mais je n'ai jamais eu besoin de les utiliser.

Questions connexes