直接在vim/mvim/gvim中执行脚本

直接在vim/mvim/gvim中执行脚本,vim,vi,macvim,Vim,Vi,Macvim,TextMate有一个很好的特性,允许您在当前上下文中执行脚本,并在单独的窗口中显示输出。这使您可以在运行中编写和测试代码。我几乎可以肯定MacVim/gVIM有类似的特性,但我不确定它是什么。目前,我将缓冲区保存到磁盘,然后转到命令行并在这方面执行脚本。如何使用vim改进该工作流?您可以使用在vim中完成此操作命令。例如,要计算当前文件中的字数,可以执行以下操作: :! wc % %将替换为当前文件名。要运行脚本,您可以调用文件上的解释器-例如,如果您正在编写perl脚本: :! perl

TextMate有一个很好的特性,允许您在当前上下文中执行脚本,并在单独的窗口中显示输出。这使您可以在运行中编写和测试代码。我几乎可以肯定MacVim/gVIM有类似的特性,但我不确定它是什么。目前,我将缓冲区保存到磁盘,然后转到命令行并在这方面执行脚本。如何使用vim改进该工作流?

您可以使用
在vim中完成此操作命令。例如,要计算当前文件中的字数,可以执行以下操作:

:! wc %
%将替换为当前文件名。要运行脚本,您可以调用文件上的解释器-例如,如果您正在编写perl脚本:

:! perl %

听起来你在找

:!{cmd}
用shell执行
{cmd}

如果需要将当前文件名传递给脚本,可以使用
%
表示当前文件名:

!proofread-script %
您也可以使用
具有范围,要将命令用作筛选器,请执行以下操作:

!{motion}{filter}    " from normal mode
:{range}!{filter}    " from command mode
(在第一种情况下,与许多其他命令一样,当您键入运动时,它会将您传递到命令模式,将运动转换为一个范围,例如,
:.+2!


最后,如果您实际上不需要从文件中传递输入,而是希望在文件中传递输出,这基本上是一个简单的过滤器,最快的方法就是
!!{cmd}
。这将用命令的输出替换当前行。

您可以从vim直接运行它:


:/sh

保存文件并使用解释器调用脚本

例如:


这取决于你的操作系统-实际上我没有在M$Window$上测试它-但Conque是最好的插件之一:

事实上,它可以更好,但有效。您可以在vim“窗口”中嵌入shell窗口。

vim教程:

您可以映射键,以便perl按照上面jts的建议执行当前脚本

map <C-p> :w<CR>:!perl %<CR>
map:w:!perl%
将Ctrl+p映射到写入文件并通过perl运行它

imap <C-p> <Esc>:w<CR>:!perl %<CR>
imap:w:!perl%
允许您在插入模式下调用相同的

在vim/home文件夹中应该有.vimrc(_vimrcfor Windows)文件。它有关于vim应如何运行的说明

map:w:!perl%
只是将Ctrl+p映射到以下位置的指令:

a) 写入当前文件
:w

b) 使用%(当前打开的文件)作为参数运行命令(perl)
:!perl%

每个命令后代表“回车”:执行特定命令的指令。imap的操作与map相同,但在插入模式下侦听Ctrl+p。

输入.vimrc,只需一次按键(如
F5
)即可执行当前文件,并在新的拆分窗格缓冲区中显示结果

正常,但您需要切换到终端以查看结果

虽然您可以使用
ctrl-z
来实现这一点,并使用
fg
将vim带回来,但这仍然意味着您需要大量切换上下文

其工作方式是首先根据
文件类型猜测可执行文件,然后以当前文件作为参数运行它

接下来,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
“代码”
运行当前文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
“执行当前文件
nnoremap:callexecutefile()
“将尝试根据`&文件类型执行当前文件`
“您需要手动将最常用的文件类型映射到
“正确的shell命令。
函数!ExecuteFile()
让filetype_to_命令={
\“javascript”:“node”,
\“咖啡”:“咖啡”,
\‘python’:‘python’,
\'html':'open',
\‘sh’:‘sh’
\ }
让cmd=get(filetype_to_命令,&filetype,&filetype)
调用RunShellCommand(cmd。“%s”)
端功能
“输入任意shell命令,并将输出显示在新的缓冲区中
例如,要对当前文件进行字数计算:
"
“:Shell wc%s
"
“感谢:http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command!-complete=shellcmd-nargs=+Shell调用RunShellCommand()
函数!RunShellCommand(cmdline)
echo a:cmdline
让扩展的\u cmdline=a:cmdline
对于拆分中的零件(a:cmdline“”)

如果部分[0]=~'\v[%#这里的所有建议只显示了
:!{cmd}%
,它将当前缓冲区传递给shell cmd。 但是还有另一个选项
:write!{cmd}

例如,
:write!sh
命令的效果是,当前缓冲区的每一行都在shell中执行。
例如,当您向缓冲区添加了几行,并且希望在不首先保存缓冲区的情况下立即查看执行结果时,它通常很有用。
也可以执行某些范围,而不是而不是缓冲区的全部内容:
:[range]write!{cmd}

要执行当前的可执行脚本,请使用

:!./%

!执行一个shell命令,%s是当前文件名,./在前面添加当前目录。

您想做什么,执行您正在编写的脚本,或对您正在编写的内容执行脚本?执行我正在编写的脚本。如果脚本说“puts'hello world”"我只想在macvim/gvim中看到hello world。如果您正在编写ruby脚本,您可以执行
:!ruby%
来运行您当前正在编写的脚本。这很好,但如何使其在单独的窗口中运行?您的答案非常好。您能进一步解释它的各个部分以使其更加完整并造福于社区吗?希望我能没有让答案更加混乱,而是在运行之前保存脚本:
:w | python%
(),并重复上一个
:!./%