Pracuję nad małym skryptem Pythona, który wymaga częstego wykonywania w celu debugowania i dalszego rozwoju.
Czy mogę podzielić ekran vima i wykonać skrypt z jednej strony jednym naciśnięciem klawisza?
Pracuję nad małym skryptem Pythona, który wymaga częstego wykonywania w celu debugowania i dalszego rozwoju.
Czy mogę podzielić ekran vima i wykonać skrypt z jednej strony jednym naciśnięciem klawisza?
Odpowiedzi:
Dodaj tę linię do swojego .vimrc:
command R !./%
A potem możesz po prostu wpisać „: R” w Vimie, aby uruchomić skrypt ( vim-run-current-file )
Vim nie obsługuje i nigdy nie będzie obsługiwał wbudowanej powłoki, takiej jak emacs lub kate (jeśli masz na myśli to), zobacz to pytanie dotyczące przepełnienia stosu .
David Spillet ma rację, możesz uruchomić vima na ekranie GNU:
$ screen vim foo.txt
Ale to da ci tylko coś przypominającego menedżera okien w terminalu - BARDZO przydatne, gdy użyjesz go przez ssh lub na pudełku bez X, ale lokalnie możesz równie dobrze otworzyć inny xterm i przełączać się między nimi. *
W każdym razie, jeśli możesz żyć z faktem, że nie zobaczysz edytowanego pliku, patrząc na produkowany przez niego wynik, wskazówka Jacka M jest dobra, ale może być krótsza:
:map ;e :w<cr>:!python %<cr>
W tym samym celu mam to w moim ~/.vimrc
:
au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif
fun! CallInterpreter()
if exists("b:interpreter")
exec ("!".b:interpreter." %")
endif
endfun
map <F5> :call CallInterpreter()<CR>
Spowoduje to uruchomienie dowolnego pliku, który ma shebang ( #!
) w pierwszym wierszu. Używa interpretera do uruchomienia pliku, więc nie musi mieć uprawnień do wykonywania.
* (ekran ma inne bardzo fajne funkcje, takie jak kopiowanie i wklejanie z wyjścia, monitorowanie ukrytych okien pod kątem aktywności / braku aktywności, możliwość korzystania z sesji z różnych terminali w tym samym czasie, możliwość wylogowania, pozostawiając wszystkie programy bieganie - to potężne narzędzie).
:map ;e :w<cr>:!python %<cr>
chce wysłać echo do mojego bufora vima, aby „potwierdzić” (?), że polecenie zostało uruchomione. Jak sprawić, by po prostu cicho wykonywał polecenie? :map <silent> ...
nie wydaje się działać.
Najmniej szczegółowy sposób (który wymaga wykonania skryptu) to prawdopodobnie:
:!%
:!./%
skrypt znalazł się w bieżącym katalogu.
!
vim nakazuje vim wykonać cokolwiek, co następuje jako polecenie bash, więc możesz to zrobić !echo "Hello"
. %
Rozpręża się nazwa bieżącego pliku.
Istnieje podobne pytanie StackOverflow .
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
To jest to, czego użyłem, proszę (F5 uruchamia bieżący skrypt).
Aby zmienić Vima w potężne IDE Pythona, polecam ten samouczek:
Umieść ten mały fragment w swoim .vimrc, aby wykonać bieżący plik jednym naciśnięciem klawisza (jak F5
) i wyświetlić wynik w nowym buforze podzielonego panelu.
:!
jest w porządku, ale musisz przełączyć się na terminal, aby zobaczyć wynik.
Chociaż możesz to zrobić za pomocą ctrl-z
i przywrócić z fg
nim vima , nadal musisz dużo zmieniać kontekst.
Sposób działania tego fragmentu polega na zgadywaniu pliku wykonywalnego na podstawie, filetype
a następnie uruchamianiu go z bieżącym plikiem jako argumentem.
Następnie przydatna metoda narzędzia pobiera dane wyjściowe i zrzuca je do nowego bufora.
Nie jest idealny, ale naprawdę szybki w przypadku typowych przepływów pracy.
Oto fragment skopiowany poniżej:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>
" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct shell command.
function! ExecuteFile()
let filetype_to_command = {
\ 'javascript': 'node',
\ 'coffee': 'coffee',
\ 'python': 'python',
\ 'html': 'open',
\ 'sh': 'sh'
\ }
let cmd = get(filetype_to_command, &filetype, &filetype)
call RunShellCommand(cmd." %s")
endfunction
" Enter any shell command and have the output appear in a new buffer
" For example, to word count the current file:
"
" :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
echo a:cmdline
let expanded_cmdline = a:cmdline
for part in split(a:cmdline, ' ')
if part[0] =~ '\v[%#<]'
let expanded_part = fnameescape(expand(part))
let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
endif
endfor
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'You entered: ' . a:cmdline)
call setline(2, 'Expanded Form: ' .expanded_cmdline)
call setline(3,substitute(getline(2),'.','=','g'))
execute '$read !'. expanded_cmdline
setlocal nomodifiable
1
endfunction
Nie wiem bezpośrednio o vimie, ale ogólnie możesz podzielić ekran w ten sposób za pomocą screen
narzędzia. ctrl+ a, S(uwaga, to wielka litera S) podzieli ekran i możesz przełączać się między nimi za pomocą ctrl+ a, tab(jeśli okno jest puste, użyj ctrl+ a, naby przejść do innego otwartego okna lub ctrl+ a, caby utworzyć nowe) .
Możesz podzielić ekran na więcej niż dwa i zmienić rozmiar podziałów za pomocą ctrl-a,: resize. Często używam ekranu w ten sposób i chociaż nie jest to rozwiązanie jednoklawiszowe, o które prosisz, może być bardzo wygodne.