关于Vim脚本的一个问题:根据文件类型的不同引用不同的命令到命令区(不执行)

Vim、Emacs配置和使用
回复
aikilis
帖子: 12
注册时间: 2011-06-08 13:26

关于Vim脚本的一个问题:根据文件类型的不同引用不同的命令到命令区(不执行)

#1

帖子 aikilis » 2012-03-19 18:12

我想实现如下功能,按F10。Vim会根据文件类型的不同自动将编译命令引到命令区(不执行),这样方便我修改编译参数。
按F11,则根据文件类型将编译好的文件引到命令区(不执行),方便我加参数或者重定向,如果是一般程序则直接引程序名,如果是java程序,则引"java +文件名"

这是我自己实现这功能的vimrc的片段,但是不起作用,似乎在启动的时候不能判断文件类型?请问该怎么办?谢谢大家了!


if &filetype=="c"
map <F10> <Esc>:!gcc % -Wall -ansi -Wmain -lm -o %<
map <F11> <Esc>:!%<
elseif &filetype=="cpp"
map <F10> <Esc>:!g++ % -Wall -ansi -Wmain -o %< -lm
map <F11> <Esc>:!%<
elseif &filetype=="java"
map <F10> <Esc>:!javac %
map <F11> <Esc>:!java %<
endif
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 关于Vim脚本的一个问题:根据文件类型的不同引用不同的命令到命令区(不执行)

#2

帖子 lilydjwg » 2012-03-19 20:29

你得弄清楚 vimrc 是 Vim 启动时执行的。其实,你可以把特定类型的配置写到 ftplugin/<filetype>.vim 里。或者使用自动事件

代码: 全选

autocmd BufRead *.c map <buffer> blahblahblah
好好看文档吧。PS: 文档有简体中文的,关键字 vimcdoc。
pheyx
帖子: 6
注册时间: 2006-01-19 20:47

Re: 关于Vim脚本的一个问题:根据文件类型的不同引用不同的命令到命令区(不执行)

#3

帖子 pheyx » 2012-03-19 20:40

可以这样:

代码: 全选

function g:compileByFileType()
  if &filetype=="c"
    map <F10> <Esc>:!gcc % -Wall -ansi -Wmain -lm -o %<
    map <F11> <Esc>:!%<
  elseif &filetype=="cpp"
    map <F10> <Esc>:!g++ % -Wall -ansi -Wmain -o %< -lm
    map <F11> <Esc>:!%<
  elseif &filetype=="java"
    map <F10> <Esc>:!javac %
    map <F11> <Esc>:!java %<
  endif
endfunction
autocmd FileType * call g:compileByFileType()
试过可以,但为什么你的写法不行,我也不太清楚,我也是初学者。另外如果不想懒省事的话,可以把最后的 * 分别改为 c,cpp,java写三行.
aikilis
帖子: 12
注册时间: 2011-06-08 13:26

Re: 关于Vim脚本的一个问题:根据文件类型的不同引用不同的命令到命令区(不执行)

#4

帖子 aikilis » 2012-03-19 21:04

lilydjwg 写了:你得弄清楚 vimrc 是 Vim 启动时执行的。其实,你可以把特定类型的配置写到 ftplugin/<filetype>.vim 里。或者使用自动事件

代码: 全选

autocmd BufRead *.c map <buffer> blahblahblah
好好看文档吧。PS: 文档有简体中文的,关键字 vimcdoc。
自动事件搞定,谢谢!
回复