TextMate имеет приятную функцию, которая позволяет выполнять скрипт из текущего контекста и отображает вывод в отдельном окне. Это позволяет вам писать и тестировать код на ходу. Я почти уверен, что есть аналогичная функция с MacVim/gVIM, но я не уверен, что это такое. В настоящее время я сохраняю свои буферы на диск, затем перехожу в командную строку и выполняю сценарий в этом отношении. Как улучшить этот рабочий процесс с помощью vim?Выполнение скрипта непосредственно в vim/mvim/gvim
ответ
Вы можете сделать это в vim, используя команду !
. Например, чтобы подсчитать количество слов в текущем файле вы можете сделать:
:! wc %
% заменяется текущим именем. Чтобы запустить скрипт, который вы могли бы назвать интерпретатор на файл - например, если вы пишете на языке Perl скрипт:
:! perl %
Также сохраните сценарий перед запуском: ': w | python% '([несколько коммандов] (http://unix.stackexchange.com/questions/144568/how-do-i-write-a-command-in-vim-to-run-multiple-commands)) И для повторения последней команды ':': – Dominik
И [повторить последнюю команду ':'] (http://vim.wikia.com/wiki/Repeat_last_colon_command): * Введите '@@' или * Тип ' : 'и использовать курсор вверх @jts: Возможно, вы это добавите. – Dominik
Если вы редактируете файл, у которого уже установлены * execute * разрешения, выполните ':! ./% 'будет использовать строку * shebang *, чтобы определить, как запускать и выполнять файл. –
Это звучит, как вы ищете !
:
:!{cmd}
Выполнить{cmd}
с оболочка.
Вы можете использовать %
для обозначения текущего файла, если вам нужно передать его в сценарий:
!proofread-script %
Вы также можете использовать !
с диапазоном, чтобы использовать команду в качестве фильтра:
!{motion}{filter} " from normal mode
:{range}!{filter} " from command mode
(В первом случае, как и во многих других команд, когда вы набираете движение, он будет проходить мимо вас в командный режим, превращая движение в диапазоне, например, :.,.+2!
)
И, наконец, если вам действительно не нужно передавать входные данные из вашего файла, но вы хотите получить результат в своем файле, это, по сути, тривиальный фильтр, а самый быстрый способ сделать это - !!{cmd}
. Это заменит текущую строку на выход команды.
Вы можете запустить его прямо из Vim:
:!./script.sh
сохранить файл и вызывать сценарий с помощью интерпретатора
например .:
:!python %
Это хорошо, но как я могу заставить его работать в отдельном окне? – qed
Ну это зависит от вашего OS - на самом деле я не тестировал его на M $ Window $ - но Conque - один из лучших плагинов вокруг: http://code.google.com/p/conque/
На самом деле, это может быть лучше, но работает. Вы можете вставить окно оболочки в окно «vim».
Это не запасы, конечно, но, вероятно, не оправдывает нисходящие потоки - это хороший плагин, как только вы его запустили, и можете превратить VIm в своего рода сценарий IDE, что является одним из логических способов интерпретации ОП. – ruffin
ВИМ учебник: Mapping keys in Vim
Вы можете отобразить ключи так Perl выполняет текущий сценарий, как предложено выше JTS.
map <C-p> :w<CR>:!perl %<CR>
сопоставляются Ctrl + P, чтобы записать файл и запустить его с помощью Perl
imap <C-p> <Esc>:w<CR>:!perl %<CR>
позволяет вызвать то же самое в режиме вставки.
У вас должен быть файл .vimrc (_vimrc для Windows) в вашей папке vim/home. В нем содержатся инструкции о том, как вести себя vim.
map <C-p> :w<CR>:!perl %<CR>
просто инструкция для отображения Ctrl + P, чтобы:
а) ток записи файла :w
б) команда запуска (Perl) с помощью% (в настоящее время открытия файла) в качестве параметра :!perl %
<CR>
после каждой команды означает «возврат каретки»: инструкция для выполнения определенной команды. imap делает то же самое, что и map, но прослушивает Ctrl + p в режиме вставки.
Поместите this small snippet в свой .vimrc, чтобы выполнить текущий файл с одним нажатием клавиши (например, F5
) и отобразить результат в новом буфере с разделенной панелью.
:!
все в порядке, но вам нужно переключиться на терминал, чтобы увидеть результат.
Хотя вы можете сделать это с помощью ctrl-z
и вернуть vim обратно с fg
, это все равно означает, что вам нужно много переключать контекст.
Как это работает snippet, сначала угадывая исполняемый файл на основе filetype
, а затем запуская его с текущим файлом в качестве аргумента.
Следующий a handy utility method принимает выходные данные и отправляет их в новый буфер.
Это не идеально, но очень быстро для обычных рабочих процессов.
Вот фрагмент скопирован ниже:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" 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
Спасибо за этот ответ. Это делает его безболезненным, чтобы изучить скрипты bash изнутри Vim. Я изменил строку 511: '\ 'sh': 'sh'' в [фрагменте, на который вы ссылались] (https://github.com/emorikawa/dotfiles/blob/44b25821891a6873dab10364728bc7df99450b7c/vim/vimrc#L496-L542) на' \ 'sh': 'bash' '. Я пытался узнать об этой строке '<<<' и не получал ожидаемых результатов. Оказывается, что bash и not sh поддерживает здесь-строку '<<<', поэтому я изменил оболочку для sh скриптов. – DMfll
Все предложения здесь просто продемонстрировали :!{cmd} %
, который проходит текущий буфер в ЦМД оболочки. Но есть и другой вариант. :write !{cmd}
Например, действие команды :write !sh
состоит в том, что каждая строка текущего буфера выполняется в оболочке.
Часто полезно, например, если вы добавили пару строк в буфер и хотите сразу увидеть результат выполнения, не сохраняя сначала буфер.
Также можно выполнить некоторый диапазон, а не всего содержимого буфера: :[range]write !{cmd}
- 1. Выполнение SQL-скрипта в Go непосредственно из файла или строки
- 2. Выполнение скрипта внутри скрипта
- 3. Какой из них лучше? Выполнение скрипта непосредственно с управляющей машины или копирование и выполнение локально?
- 4. Как запланировать выполнение скрипта PHP?
- 5. Выполнение скрипта python в localhost
- 6. Выполнение скрипта python в Django
- 7. Отключить выполнение скрипта в iframe
- 8. Выполнение скрипта в ответе ajax
- 9. Выполнение скрипта scala в IDE
- 10. Выполнение скрипта bash в eclipse
- 11. Выполнение скрипта bash в python
- 12. Выполнение PHP-скрипта в MySQL
- 13. Выполнение скрипта в selenium python
- 14. Выполнение скрипта C# в Java
- 15. Выполнение скрипта Python в Flask
- 16. Выполнение скрипта bash в градиенте
- 17. Выполнение скрипта Python в PHP
- 18. Выполнение реентерабельного скрипта -?
- 19. Lua продолжить выполнение скрипта
- 20. Выполнение скрипта KornShell
- 21. Выполнение исполняемого скрипта Python
- 22. Остановить выполнение скрипта sql
- 23. Выполнение скрипта XAMPP-python
- 24. выполнение скрипта perl
- 25. Остановить выполнение скрипта Ruby
- 26. Выполнение скрипта python самостоятельно
- 27. Rundeck :: Выполнение скрипта python
- 28. Неверное выполнение пакетного скрипта
- 29. Выполнение скрипта php
- 30. Выполнение серийного скрипта последовательно
Что вы пытаетесь сделать, выполнить сценарий, который вы пишете, или выполнить скрипт на том материале, который вы пишете? – falstro
выполните сценарий, который я пишу.Если сценарий говорит «ставит« привет мир », я просто хочу увидеть мир привет в macvim/gvim. – randombits
Если вы пишете рубиновый скрипт, вы можете просто сделать::! ruby% 'для запуска скрипта, который вы сейчас пишете. – rampion