2009-06-16 3 views
11

Durch die Verwendung der Remote-Funktion in vim ist es möglich, eine Instanz von vim wiederzuverwenden, um mehrere Dateien nach Bedarf zu laden.Wiederverwendung von vim-Instanz von Linux-Terminal

Es wird nett sein, diese Einrichtung aus der gleichen Terminal-Instanz zu haben.

Ich bin mehr daran interessiert, eine Tab-basierte Schnittstelle zu haben, die in vim verfügbar 7+ Das Szenario

  1. Terminal öffnen
  2. vim file1.cpp
  3. bearbeiten sollte - Speichern - Strg + Z zu erhalten
  4. aufzufordern, eine andere Datei öffnen
    • vim file2.cpp
  5. Jetzt haben wir file1.cpp und file2.cpp öffnen im gleichen Editor

Ist das möglich ?!

Antwort

3

Ich habe ein paar Vorschläge für Sie, obwohl keine genau das ist, wovon Sie reden. Die erste ist NERD Tree, die Ihnen einen schönen baumbasierten Dateibrowser zum Öffnen anderer Dateien bietet. Sehr praktisch. Ich habe auch einen Hotkey eingerichtet (ctrl+o), um NERD Tree für mich zu öffnen. Ich halte einen Alias ​​für was auch immer Projekt, das ich bin auf in ~/curr/trunk, so das funktioniert immer für mich:

map <C-O> :NERDTreeToggle ~/curr/trunk/<CR> 

Die andere Sache, die ich vorschlagen würde, ist mit Strg + z aufzuräumen. Es ist etwas klobig und jeder, der diese Methode benutzt, neigt dazu, verloren zu gehen und am Ende mit 3 oder 4 Vim im Hintergrund zu laufen. Schau dir an, wie du dir eine Shell öffnest.Ich benutze eine Karte für; s einen Shell-Skript auszuführen:

map ;s :!~/.vim/shell.sh<CR> 

Welche ausführt:

#!/bin/sh 
/usr/local/bin/bash -l; 

Ich habe auch ein wenig Magie in meinen .profile für die es offensichtlich, dass ich in VIM bin :

if [ "$VIMRUNTIME" != "" ] ; then 
    export PS1="\[email protected]\h \W \t$ vim> " 
fi 

</2 Cent >

+0

Brilliant! Dieser funktioniert viel besser als das, was ich suchte. Ich habe einige Skripte gemacht, die emulieren werden, was ich wollte, aber in bestimmten Situationen fand ich es scheußlich. Ich konnte es auch nicht gut debuggen. Einen Schritt zurück zu nehmen und in JachMs Schuhen zu denken, half mir mit einer besseren Lösung.! Prost Jack! –

+0

Ich habe einen Hotkey hinzugefügt, mit dem ich NERD Tree umschalten kann. Könnte nützlich sein. –

3

können Sie teilen den aktuellen Bildschirm und öffnen zwei (oder mehr) Dateien auf folgende Weise:

Für eine horizontale Spaltung, zu tun:

:sp 'filename' 

und für eine vertikale Teilung, tun:

Um zwischen den beiden zu wechseln, drücken Sie Strg + w und navigieren Sie mit der Pfeiltaste zu der Datei, die Sie bearbeiten möchten.

Auch, wenn Sie wollen einfach nur Dateien umschalten (und haben nur eine offen), können Sie dies tun:

:e 'filename' 
+0

Jack M.s Antwort ist sicherlich richtig, aber das ist eine viel einfachere Lösung. –

1

Sie die hidden Funktion auf vim einstellen können, ermöglichen es, mehrere Dateien geöffnet haben :

:set hidden 

Anschließend können Sie beliebig viele Dateien öffnen, wie Sie wollen, ohne wechseln wollen stört sie jedes Mal, wenn Sie speichern einen „Puffer“:

:e 'filename' 

Sie haben mehrere Befehle, um die Puffer zu navigieren:

:bnext 
:bprev 
:buffers 

Natürlich, wie durch samoz erwähnt, können Sie Ihren Bildschirm aufteilen mehrere Puffer auf dem gleichen Fenster zu sehen.

Ich würde vorschlagen, this für eine gute Einführung über Vim zu lesen, es wird Ihnen eine Menge Zeit sparen.

Viel Glück!

2

G'day,

Oder wenn Sie mehrere Dateien haben wollen, aber das ganze vim Fenster für eine Datei zu einem Zeitpunkt können Sie nur eingeben

:e 'filename' 

die neue Datei zu öffnen. Sie können dies mehrmals tun. Um zu sehen, was Sie gerade geöffnet haben, geben Sie

:ls 

hüpfen zwischen den Dateien, die Sie geöffnet haben können Sie mit cntl-^(Shift-cnt-6) und wechselt zwischen Haupt- und Neben Dateien (mit einer% und # in der Dateiliste angezeigt)

Oder Sie

:n b 

wobei n die Nummer am Anfang der Datei, die Sie in der Liste eintragen können durch den ‚ls‘ gezeigt Befehl.

HTH

prost,

6

Ich bin mir nicht sicher, ob dies die Art und Weise genau durchgeführt werden kann, die Sie spezifizieren, aber etwas sehr ähnliches kann wahrscheinlich einen vim-Server durchgeführt werden unter Verwendung läuft auf Ihrem lokale Maschine.

Blick in die :help remote.txt in Vim.

Wenn Ihre Version von vim mit +clientserver kompiliert wurde, können Sie mit vim einen vim-Server erstellen und dann Befehle ausführen, z. eine andere Datei öffnen.
Der Switch --servername kann einen neuen Server erstellen, und der Switch --remote kann zusätzliche Befehle oder Dateien senden.

z.B.

vim --servername test file1.txt 
vim --servername test --remote file2.txt 

Ich habe einen Blick gehabt, und der vim ich auf xubuntu auf einem meiner Rechner als Standard ist es nicht, aber es gibt einige Anweisungen here, die helfen können, wenn Ihr es kompiliert . Wenn dies nicht der Fall ist, ist die Installation von gvim und symlinking offensichtlich eine Option (wie sie in gvim standardmäßig enthalten ist) oder das Kompilieren der Binärdateien von der Quelle.

Edit:
ich eher ein Spiel mit gvim gehabt haben und dies nicht das sieht möglich innerhalb des Terminals zu tun. Control-Z unterbricht den Job auf Prozessebene. Ich dachte, es könnte mit dem Bildschirm funktionieren, aber keine Kommunikation scheint stattfinden, es sei denn gvim hat in einem grafischen Fenster gestartet,

+0

Als Antwort auf Ihre Bearbeitung, funktioniert es, wenn Sie nach C-Z den Prozess bgg, so dass er nicht ausgesetzt ist? –

+0

Ich war genau die selbe Route runtergegangen. In der Tat ein wenig weiter, indem Sie ein Wrapper-Skript verwenden, um bash's Job-Management zu verwenden, um den vim zurück ins Leben zu treten, bevor Sie - remote Anrufe machen. Es hat zu einem gewissen Grad funktioniert, aber der Erfolg war ziemlich zeitweilig. –

5

Dies ist einfach zu tun, wenn Sie zusammengestellt VIM mit +clientserver, wie Andy suggested in a previous answer.

Ich habe folgende Möglichkeiten:

ich auf VIM als Server gestartet:

vim --servername abc 

ich es mit CTRL+Z suspendiert und tat

vim --servername abc --remote ~/.cshrc 
fg 

Jetzt VIM ~/.cshrc hatte offen.

Dann habe ich:

vim --servername abc --remote ~/.aliases 
fg 

Jetzt VIM mit ~/.aliases einen Puffer mit ~/.cshrc und ein anderer hatte.

Dann habe ich:

vim --servername abc --remote-tab ~/foo_bar 
fg 

Und jetzt ich VIM hatte eine Lasche mit den beiden vorherigen Puffer offen und ein anderes Register mit ~/foo_bar offen.

In Call-Fällen lief VIM im Terminal, nicht als GUI.