9
votes

Comment rediriger la sortie dans GVIM en tant que liste de fichiers à ouvrir?

Je voudrais fondstr / m fond * .vim | gvim Pour ouvrir tous les fichiers *. Vim contenant dans une seule instance de GVIM - mais je ne peux pas faire fonctionner la tuyauterie.

Ceci est très similaire à ce Question Mais au lieu de capturer la sortie STDIN, je voudrais que GVIM traite la sortie en tant que liste de fichiers à ouvrir - et sur un système Windows de sorte que Xargs ne soit pas garanti. Des idées?


1 commentaires

Il y a aussi cette question stackoverflow.com/questions/437262/... , mais la solution retenue ne fonctionne pas pour moi.


4 Réponses :


4
votes

ouvrir PowerShell: xxx


1 commentaires

Merci, mais PowerShell est pas une option. Je besoin d'une solution avec dos de barebones.



4
votes

in Bash:

grep -l background *.vim | sed 's/^/:edit /' > files
vim -s files


4 commentaires

Encore une fois merci, mais je suis à la recherche de solutions spécifiques dos; grep et xargs ne sont pas disponibles pour moi et les télécharger ne sont pas une option.


Je ne l'ai pas remarqué tag dos. Désolé.


Une autre idée avec Vim -S. Il a besoin d'un fichier temporaire cependant. Et aussi sed ou une magie ED (ED fait partie de VI, de sorte que vous l'avez sûrement).


Faire cela avec Vim pourrait gâcher votre terminal. Je suggérerais gvim $ (arrière-plan grep -l * .vim)



6
votes

Je peux penser à quelques façons de faire ceci:

Utilisez Vimgrep h2>

Utiliser Vimgrep: Après avoir exécuté GVIM, entrez: P>

@echo off
REM Welcome to the hideous world of Windows batch scripts
findstr /m background *.vim > list_of_files.txt
REM Run GVIM (may not be required)
gvim
REM Still in command prompt or .bat file here
REM for each line in the file "list_of_files.txt", pass the line to OpenInTab
for /f %%i in (list_of_files.txt) do call:OpenInTab %%i
goto:eof

:OpenInTab
REM Open the file in a separate tab of an existing vim instance
gvim --remote-tab %~1
goto:eof


6 commentaires

Jusqu'à présent, j'aime utiliser l'option Cleverness intégrée de Vim ... mais la sortie de FindStr est dans des chemins relatifs et VIM a besoin du chemin absolu d'ouvrir le fichier - Comment puis-je prépare la sortie de la répertoire actuelle?


Que diriez-vous: (. *)% S / \ v / ESCAPED_DIR $ \ 1 / g, où ESCAPED_DIR $ serait le chemin vers le répertoire approprié (y compris un séparateur de chemin final) avec des séparateurs de chemin échappé à barres obliques inversées (par exemple C: \\ chemin \\ à \\ pwd \)? (Les tours \ v sur le comportement super-magique des caractères spéciaux) regex.


VIM ne devrait pas avoir besoin du chemin absolu aussi longtemps que le chemin est relatif au répertoire que vous pouvez. Par conséquent, vous pouvez faire : cd common_path avant d'exécuter le : g commander. Si vous souhaitez modifier les chemins, effectuez simplement :% s @ ^ @ c: / chemin / vers / dossier / @ (VIM peut faire face à des barres obliques vers l'avant et cela permet d'éviter d'échapper au chemin).


Notez également que si list_of_files.txt est dans l'emplacement "CORE COMMUN", vous pouvez faire : cd%: p: h pour passer à la voie commune.


Merci pour l'aide à ce sujet. À partir du script de lot, je peux également émettre cette commande Vim -c "LCD% CD%" et qui semble fonctionner juste trouver. Mon problème est maintenant avec le : g / ^ / exe 'Tabedit' getline ('.') commande. Il semble seulement fonctionner avec le plus haut fichier. Des idées?


Il semble que le premier Tabedit arrête la commande : g de l'exécution. J'ai modifié la description ci-dessus pour ajouter quelques alternatives (testées).



0
votes

N'importe lequel d'entre eux ouvrira une instance distincte de gvim code> avec chaque nom de fichier - particulièrement utile s'il n'y a qu'un seul nom de fichier, mais fonctionne pour plusieurs noms de fichiers à condition que vous soyez ok avec plusieurs instances de GVIM: 1) FindStr à l'intérieur de STRT> P>

findstr /m background *.vim | gvim_stdin


0 commentaires