您尚未登录。

#1 2014-10-13 21:50:09

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Vim问题:什么时候该用setf,什么时候该用set ft=;请求为PKGINFO.vim勘误!

我正在尝试为 .PKGINFO 和 .AURINFO 文件添加 Vim 语法高亮,但是由于水平太低,在应该使用 setf 还是 set ft= 的问题上卡住了。

就是在写这个文件的时候: ftdetect/PKGBUILD.vim
我选择用 set ft=

autocmd BufNewFile,BufRead PKGBUILD set ft=PKGBUILD
autocmd BufNewFile,BufRead *.install,install,.INSTALL set ft=sh
autocmd BufNewFile,BufRead .AURINFO,.PKGINFO set ft=PKGBUILD syn=PKGINFO

先查了一下 Vim 的帮助文件:

:setf[iletype] {filetype}            *:setf* *:setfiletype*
            把 'filetype' 选项设为 {filetype}。但如果已经在 (嵌套)
            自动命令序列中设置过,就不再进行。
            等价于下面代码的缩写:
                :if !did_filetype()
                :  setlocal filetype={filetype}
                :endif
            在一个 filetype.vim 里使用该命令可避免设置 'filetype'
            选项两次,导致不同的设置和语法文件被载入。
            {Vi 无此功能}

:setf[iletype] {filetype}            *:setf* *:setfiletype*
            Set the 'filetype' option to {filetype}, but only if
            not done yet in a sequence of (nested) autocommands.
            This is short for:
                :if !did_filetype()
                :  setlocal filetype={filetype}
                :endif
            This command is used in a filetype.vim file to avoid
            setting the 'filetype' option twice, causing different
            settings and syntax files to be loaded.
            {not in Vi}

然后是网上一些意见:

http://www.newsmth.net/nForum/#!article/VIM/61188

au BufRead,BufNewFile *.rc setf csh          //不起作用
au BufRead,BufNewFile *.rc set ft=csh          //起作用

http://www.douban.com/group/topic/39880287/

更好的命令是 :setf html,因为 :setf 这个命令有补全但是 set ft= 的没有。不过好像是 vim 7.3 才有 setf 命令。

http://dailyvim.blogspot.com/2008/12/se … 7084218281

Be warned that :setf won't change 'ft' if it has already been set to something else.

Also, if you start a new file with the name and extension you intent to call it, vim will set the filetype for you.


然后是一些插件的示例:

ftdetect/markdown.vim

autocmd BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mkd,*.mkdn
      \ if &ft =~# '^\%(conf\|modula2\)$' |
      \   set ft=markdown |
      \ else |
      \   setf markdown |
      \ endif

ftdetect/javascript.vim

au BufNewFile,BufRead *.js setf javascript
au BufNewFile,BufRead *.jsm setf javascript
au BufNewFile,BufRead Jakefile setf javascript

fun! s:SelectJavascript()
  if getline(1) =~# '^#!.*/bin/env\s\+node\>'
    set ft=javascript
  endif
endfun
au BufNewFile,BufRead * call s:SelectJavascript()

有点看不懂了,到底我选择用 set ft= 是正确的吗? mad

===========================================

还有请求为我写的 PKGINFO.vim 勘误!我参照修改了 pacman 的 PKGBUILD.vim ,但是我找不到一份官方的 .PKGINFO / .AURINFO 语法说明的文档,总感觉改得不对。

最近编辑记录 danielhugo (2014-10-13 23:43:27)


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#2 2014-10-13 23:51:20

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,478
个人网站

Re: Vim问题:什么时候该用setf,什么时候该用set ft=;请求为PKGINFO.vim勘误!

我没感觉到这两个有区别……然后,因为 setf 有补全,所以我一直在用 setf……

另外,PKGINFO 是什么时候用的呀,desc 文件用它好像不对呢?

离线

#3 2014-10-14 02:51:07

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Re: Vim问题:什么时候该用setf,什么时候该用set ft=;请求为PKGINFO.vim勘误!

百合仙子 说:

我没感觉到这两个有区别……然后,因为 setf 有补全,所以我一直在用 setf……

另外,PKGINFO 是什么时候用的呀,desc 文件用它好像不对呢?

每个软件包里面都有一个 .PKGINFO 文件吧,
desc 文件的格式好像变化更大了,有空试试给它也做一个语法高亮文件……

我看不懂的是上面引用的那两个插件的ftdetect,求详细解释……

最近编辑记录 danielhugo (2014-10-14 02:52:36)


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

页脚