Jak uruchomić plik, który edytuję w Vi (m) i uzyskać wynik w podzielonym oknie (jak w SciTE)?
Oczywiście mogłem to wykonać w ten sposób:
:!scriptname
Ale czy można uniknąć pisania nazwy skryptu i jak uzyskać dane wyjściowe w podzielonym oknie zamiast u dołu ekranu?
:!"%:p"
radzić sobie z białymi znakami.Odpowiedzi:
Jest
make
polecenie. Uruchamia polecenie ustawione wmakeprg
opcji. Użyj%
jako symbolu zastępczego dla bieżącej nazwy pliku. Na przykład, jeśli edytujesz skrypt w języku Python:Tak, musisz uciec z kosmosu. Następnie możesz po prostu uruchomić:
Jeśli chcesz, możesz ustawić
autowrite
opcję, która zapisze się automatycznie przed uruchomieniemmakeprg
:To rozwiązuje część wykonawczą. Nie znam żadnego sposobu na przeniesienie tego wyjścia do podzielonego okna, które nie wymaga przekierowania do pliku.
źródło
:copen
do otwierania „listy błędów” utworzonej przez uruchomienie. W:make
jego własnym oknie. Niestety, aby uzyskać poprawne sformatowanie danych wyjściowych, konieczne jest znalezienie tejerrorformat
opcji. W przeciwnym razie zakłada się, że wyjście ma format, jaki generuje gcc.:let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
), choć wygląda zagadkowo, działa dokładnie tak, jak zadał mu autor pytania.Aby uzyskać dostęp do nazwy pliku bieżącego bufora, użyj
%
. Aby umieścić go w zmiennej, możesz użyćexpand()
funkcji. Aby otworzyć nowe okno z nowym buforem, użyj:new
lub:vnew
. Aby przesłać dane wyjściowe polecenia do bieżącego buforu, użyj:.!
. Kładąc wszystko razem:oczywiście zastępując
ruby
dowolną komendą. Użyłem,execute
więc mogłem otoczyć nazwę pliku cudzysłowami, więc zadziała, jeśli nazwa pliku zawiera spacje.źródło
:command! R let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
aby móc po prostu użyć:R
do wykonania jego poleceniaVim ma polecenie
!
("bang"), które wykonuje polecenie powłoki bezpośrednio z okna VIM-a. Ponadto pozwala na uruchomienie sekwencji poleceń związanych z potokiem i odczytem stdout.Na przykład:
jest równoznaczne z otwarciem okna wiersza poleceń i uruchomieniem poleceń:
Zobacz "Wskazówki Vima: Praca z poleceniami zewnętrznymi" po szczegóły.
źródło
Mam do tego skrót w moim vimrc:
To zapisuje bieżący bufor, sprawia, że bieżący plik jest wykonywalny (tylko unix), wykonuje go (tylko unix) i przekierowuje dane wyjściowe do .tmp.xyz, następnie tworzy nową kartę, odczytuje plik, a następnie usuwa go.
Rozbijając to:
źródło
:w<CR>:silent !chmod +x %:p<CR>:silent !%:p 2>&1 | tee ~/.vim/output<CR>:split ~/.vim/output<CR>:redraw!<CR>
- przekierowuje zarówno stdout, jak i stderr do pliku tymczasowego, a zanim to zrobi, wypisuje wszystko na stdout, więc jeśli skrypt trwa długo, widać, że działa. Ponadto jest niezależny od katalogu (otrzymywałem błędy podczas otwierania plików według ich bezwzględnej ścieżki). Nie uruchamia jednak interaktywnie skryptów i nie znalazłem sposobu, aby to zrobić.Użyłem skryptu Shell
źródło
Vim 8 ma wbudowany interaktywny terminal. Aby uruchomić bieżący skrypt basha w podzielonym panelu:
lub w skrócie
%
rozwija się do bieżącej nazwy pliku.Od
:help terminal
:źródło
Używam nieco bardziej inwazyjnego mechanizmu poprzez mapy:
Po prostu sprawia, że nie muszę zapisywać, a potem idź. Po prostu idź.
źródło
Możesz użyć wtyczki vima bexec . O ile mi wiadomo, najnowsza wersja to 0.5.
Następnie:
Wewnątrz samego vima podczas edycji pliku .vba wykonaj:
Pojawi się informacja, że bexec.vim został napisany, a także dokumentacja itp.
Teraz możesz to przetestować otwierając swój (dowolny skrypt językowy, który ma interpreter #! Działający poprawnie) w vimie i uruchom
Uwaga: chciałem, aby podział był pionowy, a nie poziomy, więc zrobiłem:
i zmieniłem wartość z „hor” na „ver” ..
Wiem, że to stare pytanie, ale mam nadzieję, że może to komuś pomóc. Pracowałem w tym samym numerze podczas kursu Coursera Startup Engineering, na którym profesor Palaji używa Emacsa, a ja nie lubię Emacsa.
źródło
W oparciu o @SethKriticos i @Cyril Answers używam teraz następujących elementów:
Użyj F9, aby skonfigurować nowe okno i F2, aby wykonać skrypt i tee w pliku wyjściowym.
Dodałem również nazwę skryptu do nazwy pliku wyjściowego, dzięki czemu można jej używać dla wielu skryptów w tym samym czasie.
źródło
W swoim
.vimrc
możesz wkleić tę funkcjęNastępnie jako przykład
vim
uruchom polecenie:shell python ~/p.py
. Wynik otrzymasz w podzielonym oknie. + Po zmianach wp.py
przykładzie uruchomisz ponownie to samo polecenie, ta funkcja nie utworzy ponownie nowego okna, wyświetli wynik w poprzednim (tym samym) podzielonym oknie.źródło
@xorpaul
Szukałem tego skryptu (python / Windows) od jakiegoś czasu. Ponieważ w systemie Windows nie ma „trójnika”, zmieniłem go na:
źródło
Po prostu użyj dwukropka i wykrzyknika, jak pokazano poniżej
źródło
Polecam szybkie uruchamianie wtyczki . Konfiguracja jest szybka i prosta. Oto mała demonstracja:
źródło