TextMate имеет приятную функцию, которая позволяет вам выполнить script из текущего контекста и отображает вывод в отдельном окне. Это позволяет вам писать и тестировать код на ходу. Я почти уверен, что есть аналогичная функция с MacVim/gVIM, но я не уверен, что это такое. В настоящее время я сохраняю свои буферы на диск, затем перехожу в командную строку и выполняю script в этом отношении. Как улучшить этот рабочий процесс с помощью vim?
Выполните script непосредственно внутри vim/mvim/gvim
Ответ 1
Вы можете сделать это в vim, используя команду !
. Например, чтобы подсчитать количество слов в текущем файле, которое вы можете сделать:
:! wc %
Значение% заменяется на текущее имя файла. Для запуска script вы можете вызвать интерпретатор в файле - например, если вы пишете perl script:
:! perl %
Ответ 2
vim tutorial: Отображение ключей в Vim
Вы можете сопоставлять ключи, поэтому perl выполняет текущий script, как указано выше jts.
map <C-p> :w<CR>:!perl %<CR>
отобразит Ctrl + P для записи файла и запустит его perl
imap <C-p> <Esc>:w<CR>:!perl %<CR>
позволяет вам вызывать то же самое в режиме вставки.
В вашей папке vim/home должен быть файл .vimrc(_vimrc для Windows). В нем содержатся инструкции о том, как следует вести себя vim.
map <C-p> :w<CR>:!perl %<CR>
- это просто инструкция для отображения Ctrl + p на:
a) записать текущий файл :w
b) выполнить команду (perl), используя% (текущий открытый файл) в качестве параметра :!perl %
<CR>
после каждой команды означает "возврат каретки": инструкция для выполнения определенной команды. imap делает то же самое, что и для карты, но прослушивает Ctrl + p в режиме вставки.
Ответ 3
сохраните файл и вызовите script с помощью интерпретатора
например:.
:!python %
Ответ 4
Вы можете запустить его прямо из vim:
:!./script.sh
Ответ 5
Похоже, вы ищете !
:
:!{cmd}
Выполнить{cmd}
с помощью оболочки.
Вы можете использовать %
для обозначения текущего имени файла, если вам нужно передать его в script:
!proofread-script %
Вы также можете использовать !
с диапазоном, чтобы использовать команду в качестве фильтра:
!{motion}{filter} " from normal mode
:{range}!{filter} " from command mode
(В первом случае, как и во многих других командах, когда вы вводите движение, он передаст вас в командный режим, преобразуя движение в диапазон, например :.,.+2!
)
И, наконец, если вам действительно не нужно передавать входные данные из вашего файла, но хотите, чтобы в вашем файле был выход, это по сути тривиальный фильтр, и самый быстрый способ сделать это - !!{cmd}
. Это заменит текущую строку на выход команды.
Ответ 6
Поместите этот небольшой фрагмент в ваш .vimrc, чтобы выполнить текущий файл с одним нажатием клавиши (например, F5
) и отобразить результат в новый буфер с разделенной панелью.
:!
в порядке, но вам нужно переключиться на ваш терминал, чтобы увидеть результат.
Пока вы можете сделать это с помощью ctrl-z
и вернуть vim с помощью fg
, это все равно означает, что вам нужно много переключать контекст.
Способ, которым этот фрагмент работает, сначала угадывает исполняемый файл на основе filetype
, а затем запускает его с текущим файлом в качестве аргумента.
Далее a удобный метод утилиты берет вывод и выгружает его в новый буфер.
Это не идеально, но очень быстро для обычных рабочих процессов.
Здесь фрагмент, скопированный ниже:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" 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
Ответ 7
Все предложения здесь просто представлены :!{cmd} %
, который передает текущий буфер в оболочку cmd.
Но есть еще один вариант :write !{cmd}
Например, эффект команды :write !sh
заключается в том, что каждая строка текущего буфера выполняется в оболочке.
Это часто полезно, например, если вы добавили пару строк в буфер и хотите немедленно увидеть результат выполнения, не сохраняя сначала буфер.
Также возможно выполнить некоторый диапазон, а не весь контент буфера: :[range]write !{cmd}
Ответ 8
Ну, это зависит от вашей ОС - на самом деле я не тестировал его на M $Window $- но Conque - один из лучших плагинов там: http://code.google.com/p/conque/
Собственно, это может быть лучше, но работает. Вы можете вставить окно оболочки в окно "vim".