vim 中执行程序的快捷键定义

2016-12-08 21:42:06 +08:00
 xinali

比如在 vim 中执行 python 代码可以这么定义快捷键

map <silent> <F5> :call Compile()<CR>
function! Compile()
    exec "w"
	if &filetype == "python"
		exec "!python %"
   endif
endfunc

但是如果想在 windows 下执行 powershell 呢? 我尝试过这样

if &filetype == "ps1"
	exec "!powershell %"
endif

也尝试过这样

if &filetype == "ps1"
	exec "!%"
endif

但是都失败了,具体该怎么写规则呢?

2100 次点击
所在节点    Vim
5 条回复
jswh
2016-12-08 22:10:07 +08:00
我猜,你要写上 poweshell 可执行程序的完整路径
josephpei
2016-12-09 09:39:17 +08:00
vim quickrun 之类的
skywind3000
2016-12-10 00:18:02 +08:00
因为你取的 &filetype 是需要 vim 识别得了的 filetype ,不是文件扩展名,你把它当文件扩展名来判断,显然是不正确的,你可以 ":echo &filetype" 看看你的文件是什么类型的。 ps1 的文件 &filetype 的值是 "",空,因为 vim 不识别。

取文件扩展名要用 expand("%:e") 来取,而且你上面直接使用 %也是不对的,文件名里面包含空格就挂掉了。再者你用 GVim 的话,这种直接 !的运行方式很不友好, Vim 会卡住,提示你按任意键继续。不知道网上流传的这段代码是谁写的,导出转载却又错误百出。

如何在 Vim/GVim (windows) 里面优雅的运行程序呢?见我博客。
http://www.skywind.me/blog/archives/1708
chenggiant
2016-12-12 23:13:32 +08:00
还是直接用 quickrun 吧
KentY
2016-12-14 18:20:22 +08:00
powershell 0 经验, 没法帮上忙, 但是关于你的 python 运行, 你利用 autocmd 只对 python 文件建立 mapping, 并且 ,`%` 应该做处理. 你可以参考我在这个问题的回答以及下方评论.

http://stackoverflow.com/questions/18948491/running-python-code-in-vim/18948530#18948530

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/326286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX