Otwieranie plików w istniejącym Gvim w wielu (nowych) kartach

Umieściłem kilka aliasów w moim .bashrc, aby otworzyć grupę plików projektu w gvim, każdy w swojej karcie:

gvim -p <list of file names using absolute paths>

To wszystko jest dobre i dobre, z wyjątkiem kilku grup plików, pomiędzy którymi mógłbym chcieć się przemieszczać w danym momencie(mój obecny projekt używa Ruby on Rails, więc to wyjaśnia). Co byłoby naprawdę niesamowite, gdybym mógł dołączyć nowe karty do istniejącej instancji gvim. Na ostatnim stanowisku pracowałem nad Vistą; obejrzałem to otwierając kilka pustych zakładek w gvim, co pozwoliło mi kliknąć prawym przyciskiem myszy nazwę pliku i wybrać " Otwórz w istniejącym gvimie bez nazwy."Teraz używam Ubuntu i nie ma czegoś takiego w menu kontekstowym. Czy jest jakiś sposób, aby to zrobić z linii poleceń?

Author: Mahbub, 2009-05-21

6 answers

Jeśli Vim jest kompilowany z opcją clientserver , możesz to zrobić. Uruchom instancję Vima z następującą flagą:

$ gvim --servername GVIM  # GVIM is the server name. It can be anything.

Aby otworzyć więcej kart w tym przypadku, możesz uruchomić polecenie:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ...

Funkcja clientserver w vim jest bardzo przydatna. Nie ogranicza się do otwierania plików; może być używany do wysyłania dowolnych poleceń do Vima za pomocą wiersza poleceń. Na przykład, aby zdalnie zamknąć instancję Vima, możesz użyć:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>'
 69
Author: Ayman Hourieh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-21 20:12:52

Z wnętrza Gvim, typ :tabe {file_name}. Spowoduje to otwarcie nazwanego pliku na nowej karcie. Jeśli nie lubisz wpisywać długich nazw plików, spróbuj tego:

:tabnew
:e .

Otworzy to nową, pustą stronę karty i otworzy przeglądarkę plików. Możesz kliknąć myszką lub użyć klawiatury. Kliknij lub naciśnij klawisz enter na pliku, który chcesz otworzyć. Spróbuj użyć klawiatury, aby ustawić kursor nad plikiem, który chcesz otworzyć, a następnie naciśnij "t". Spowoduje to otwarcie wybranego pliku na nowej karcie, zachowując plik przeglądarka otwiera się w pierwszej zakładce. Może to być szybki sposób na otwarcie kilku plików.

Istnieje wiele rzeczy, które możesz zrobić ze stronami kart, które mogą ułatwić życie. Aby przejść do odpowiedniej sekcji w podręczniku pomocy on line Vima, wpisz :h tabpage.

 19
Author: Steve K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-17 07:22:01

Chcesz, aby menu kontekstowe systemu Windows umożliwiało otwieranie plików na nowej karcie aktualnie otwartego okna gvim?

Zapisz to jako plik o nazwie temp.reg i kliknij dwukrotnie, aby dodać ustawienia do rejestru. Pamiętaj, aby zmodyfikować ścieżkę do Vima, jeśli twoja jest inna.

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim]
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command]
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\""

Będziesz miał teraz menu kontekstowe takie jak:

menu kontekstowe vim

 11
Author: matt burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-25 10:36:17

Użytkownicy Linuksa mogą używać tego typu skryptów:

#!/bin/bash

ANS=`pgrep -fx "gvim --servername GVIM"`

echo $@

if [[ ! $ANS ]]; then
    gvim --servername GVIM
fi

if [[ $1 ]]; then
    gvim --servername GVIM --remote-tab "${@}"
fi

A następnie Edytuj gvim.plik pulpitu do użycia tego skryptu:

Exec=/home/user/bin/my_gvim_script.sh %F
 6
Author: Jan Valiska,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-11 09:27:04

Jest sposób:

n*.cpp|tab ba

Lub jeśli chcesz podzielić:

n*.cpp|sba
Jeśli chcesz wiedzieć więcej:
:help ba

I nie wiem, co to jest n, ale bez tego by się nie udało.

 1
Author: user1021852,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-12 09:06:30

Oto mój skrypt startowy gvim. Jest to rozszerzenie wcześniejszych odpowiedzi. Zapewnia, że tylko jedna instancja gvim będzie działać, gdy gvim zostanie wywołana we wszystkich okolicznościach:

  • gvim jest wywoływana bez nazwy pliku, gdy żadna instancja gvim nie jest uruchomiona; gvim jest uruchamiana.
  • gvim jest wywoływana bez nazwy pliku w obecności instancji gvim; otwierana jest pusta Nowa karta.
  • gvim jest wywoływany z nazwą pliku z instancją gvim lub bez niej; otwierana jest zakładka pokazująca plik.

Będzie to naśladować standardowe zachowanie innych edytorów.

#!/bin/bash
exec=/usr/bin/gvim  #the path to gvim
if [ $# -eq 0 ]
  then  # no filename given
    if [ -z $($exec --serverlist) ]
      then  # no filename given and no gvim instance
        $exec -f --servername GVIM > /dev/null 2>&1
      else  # no filename given, but a gvim instance exists
        $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1
    fi
  else  # filenames given
    $exec -f --servername GVIM --remote-tab "$@" > /dev/null 2>&1
fi
 1
Author: Serge Stroobandt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-16 12:12:41