Vim: выполнить скрипт, над которым я работаю, на разделенном экране

15154
Adam Matan

Я работаю над небольшим скриптом Python, который требует частого выполнения для отладки и дальнейшего развития.

Могу ли я разделить экран vim и выполнить мой скрипт на одной части нажатием клавиши?

14

9 ответов на вопрос

9
0x89

Vim не поддерживает и никогда не будет поддерживать встроенную оболочку, такую ​​как emacs или kate (если вы это имеете в виду), см. Этот вопрос о переполнении стека .

Дэвид Спиллет прав, вы можете запустить vim на экране GNU:

$ screen vim foo.txt 

Но это только даст вам нечто, отдаленно напоминающее оконный менеджер в терминале - ОЧЕНЬ полезно, когда используется через ssh или в окне без X, но локально вы можете просто открыть другой xterm и переключаться между ними. *

В любом случае, если вы можете согласиться с тем фактом, что вы не увидите редактируемый файл, глядя на вывод, который он производит, совет Джека М хорош, но может быть короче:

:map ;e :w<cr>:!python %<cr> 

Для той же цели у меня есть это в моем ~/.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> 

Это запускает любой файл, который имеет shebang ( #!) в первой строке. Он использует интерпретатор для запуска файла, поэтому ему не нужно иметь разрешения на выполнение.

* (экран имеет некоторые другие очень удобные функции, такие как копирование и вставка из вывода, мониторинг скрытых окон на активность / отсутствие активности, возможность одновременного использования сеанса с разных терминалов, возможность выхода из всех программ. Бег - это мощный инструмент).

Эта автокоманда не работала для меня, пока я не поместил первую строку (с \ if) в ту же строку, что и au BufEnter, но я удалил \ Jason Axelson 13 лет назад 0
Vim может не поддерживать оболочку изначально, но я просто хотел упомянуть этот интересный плагин оболочки: http://www.vim.org/scripts/script.php?script_id=2771 Mr Mikkél 10 лет назад 0
`: карта; e: w:! python%`хочет отобразить данные в моем буфере vim, чтобы" подтвердить "(?), что команда была выполнена. Как заставить его просто выполнить команду без вывода сообщений? `: Карта ... не похоже на работу. Johnny Utahh 8 лет назад 0
8
caleb

Добавьте эту строку в ваш .vimrc:

command R !./% 

И тогда вы можете просто набрать ": R" в Vim для запуска скрипта ( vim-run-current-file )

4
T.N.T.

Наименее подробный способ (который требует, чтобы ваш скрипт был исполняемым):

 :!% 
2
Jack M.

Возможно, это не разделенный экран, но для меня это работает довольно хорошо:

map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR> 

Это сопоставляет, ;eчтобы записать текущий файл и выполнить его, используя python (предполагается, что python находится на вашем PATH).

2
jmetz

Bexec ВИМ плагин делает именно то, что вы хотите. Сочетания клавиш включены.

1
R. Martinho Fernandes
0
Aymeric
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR> 

Это то, что я использовал, пожалуйста (F5 запускает текущий скрипт).

Для превращения vim в мощную Python IDE я рекомендую этот урок:

0
Evan

Поместите этот небольшой фрагмент в ваш .vimrc, чтобы выполнить текущий файл одним нажатием клавиши (например F5) и отобразить результат в новом буфере разделенной панели.

:! Это нормально, но вам нужно переключиться на свой терминал, чтобы увидеть результат.

Хотя вы можете сделать это с помощью ctrl-zvim и вернуть его обратно, fgэто все равно означает, что вам нужно много переключать контекст.

Этот фрагмент работает так: сначала угадывает исполняемый файл на основе, filetypeа затем запускает его с текущим файлом в качестве аргумента.

Затем удобный полезный метод берет вывод и сбрасывает его в новый буфер.

Это не идеально, но очень быстро для обычных рабочих процессов.

Вот фрагмент, скопированный ниже:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""" 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 
-1
David Spillett

Я не знаю напрямую о vim, но вы можете разделить экран таким образом, как правило, с помощью screenутилиты. ctrl+ a, S(обратите внимание, что это заглавная буква S) разделит экран, и вы можете переключаться между ними с помощью ctrl+ a, tab(если окно пустое, используйте ctrl+ a, nчтобы перейти к другому открытому окну или ctrl+ a, cчтобы создать новое) ,

Вы также можете разделить отображение на более чем два, и изменить размер разбиений с помощью ctrl-a,: resize. Я часто использую экран таким образом, и хотя это не единственное решение, которое вы запрашиваете, оно может быть очень удобным.

Вы уверены, что это работает на Vim? Кажется, он не отвечает в моем vim (я использую команду slpit для разделения файлов). Adam Matan 14 лет назад 0
Это команды GNU screen, а не vim. innaM 14 лет назад 0
Ага. Я говорю о запуске vim на экране. David Spillett 14 лет назад 0
разделение vim - это то, что происходит в пределах области окна vim (или терминала, в котором он работает). hasen 14 лет назад 0