Подтвердить что ты не робот

Выполните script непосредственно внутри vim/mvim/gvim

TextMate имеет приятную функцию, которая позволяет вам выполнить script из текущего контекста и отображает вывод в отдельном окне. Это позволяет вам писать и тестировать код на ходу. Я почти уверен, что есть аналогичная функция с MacVim/gVIM, но я не уверен, что это такое. В настоящее время я сохраняю свои буферы на диск, затем перехожу в командную строку и выполняю script в этом отношении. Как улучшить этот рабочий процесс с помощью vim?

4b9b3361

Ответ 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".