标签归档:vim

一个新的支持latex的vim插件

Automatic (La)TeX Plugin for Vim (atp-vim)是一个新的支持LaTeX的插件。前些天刚发现时,bug还比较多,经常出错,现在的版本好多了。与latexsuite相比,有些新的功能很不错(毕竟06年以后latexsuite就没有更新过),推荐给喜欢LaTeX,VIM,Python的朋友。

完整的特性可以查阅官方的Feature List,或者手册。下面几条是我比较喜欢的。

  • 正向查找。由vim中光标处直接跳至pdf相应位置处。
  • 反向查找。由pdf跳转至vim相应源代码处。
  • 清理中间文件。这个功能实现起来不难,但是有了总是方便一点,特别是对有洁癖的人。
  • 补全命令也很丰富。

总的来说,值得一试。

ps. 目前最新的测试版是9.6.7。从SF的记录来看,最早的版本是今年3月份发布的,上来就是9.1。莫非现在流行大版本号?

7月11日补充:如果源文件所在目录的路径中包含中文,则会出现很多问题,而且很诡异。

vim高手?请看vimgolf.com

vimgolf是一个在线比试vim技巧的网站。来看看题目有多变态,比如这一题,原文是

1
2
3
4
5
6
7
8
9
10
11
this line doesn’t have indentation
this line is indented with two spaces
this one has four
this other one has two
this one is indented with two spaces
this line has a four spaces indentation
this line needs six spaces
this line needs six spaces too
this line is back to four spaces
this line is finally indented with two spaces
this final line is not indented

要求按每一行中的指定的空格数缩进,也就是格式化成这样:

1
2
3
4
5
6
7
8
9
10
11
this line doesn’t have indentation
  this line is indented with two spaces
    this one has four
  this other one has two
  this one is indented with two spaces
    this line has a four spaces indentation
      this line needs six spaces
      this line needs six spaces too
    this line is back to four spaces
  this line is finally indented with two spaces
this final line is not indented

目前已经有三位朋友提交了解答,按键最少的一位只用了25次按键就搞定了。
如果你觉得你是vim高手,去挑战一下吧。

注:要提交结果,好象先要用twitter登录,得到一个数字ID,再用ruby装一个软件。我一直没装上,不知道是什么原因。

VIM中的批量编辑(转载)

原文地址:VIM中的批量编辑

VIM 中实现对文件的批量是通过同时打开多个文件实现的,即对 args 的操作。

在命令行下,通过:

 gvim a.txt b.txt c.txt

就可以打开多个文件,或者在 GVIM 中:

 :args *.txt

也可以打开多个文件。

之后,可以通过 :ls:args:buffers 来查看当前的 buffers 列表。

现在,要同时处理这些 buffers 中的各个文件,使用 argdo 就可以了。

 :argdo %s/teh/the/ge | update

argdo 后面跟命令就可以了,它的作用就是把后面的命令应用到 arg list 中的各个文件上。

e 这个 flag 是表示忽略错误,你不希望因为一个意外而让整个处理过程停下来吧。

update 这个命令是当文件发化变化时保存文件,就和 write 一样。这里不用它,难道你想之后手动挨个保存这些文件?

VIM编辑文件实例

假设有以下文件

1234567
甲甲大学
张三
李四
王五
2222222
乙乙大学
张三三
李四四
王五五
3333333
丙丙大学
张三四
李四五
王五六
……

简单讲,每个队的信息被分成了5行,报名号、学校、队员1、队员2、队员3。我们主要的工作是要删除多余的回车符,将每一队的信息集中到一行。

  1. 删除多余的空白:“:%s/ //g”;
  2. 因为总共是1430行,也就是286个组,这个数记下来,下面要用。
  3. 合并每组的5行:在normal模式下,光标停在报名号这一行,直接输入“5J”,注意,是大写的J,也就是shift+j。可以看到,每一组的5行信息已经合并成一行了,并且以空格分隔。其中,5表示执行后面的命令5次,J表示合并两行。这一步是基础,并不需要,按“u”,退回到第2步的状态,并按“gg”,将光标停在第一行。
  4. 录制宏:开始录制以a为名字的宏,“qa”,之后依次按下面的键,“5Jjq”,其中5J的作用已经解释了,j跳到第二行,q结束录制宏。
  5. 这时候你的光标应该在第二行,并且是normal模式,依次按下面的键,“285@a”,其中@就是shift+2,@a的意思是执行宏a,也就是执行@a共285次。这时,每组的信息已经集中到一行了。
  6. 其实我们的任务基本上已经完成了,下面是先转成csv格式,再导入Excel,还是直接转成html表格,都是很容易的事情了。下面的命令就不再解释了。
  7. :%s/ /<\td><td>/g
  8. :%s/^/<tr><td>/g
  9. :%s/$/<\/td><\/tr>/g
  10. 文件最前面加上<html><body><table>,文件最后面加上</table></body></html>,大功告成。(表格加线,加标题这些自己看着办吧)

btw:

当你不了解一种工具(特别是像VIM这种强悍的工具)时,你可能根本想不到活儿还可以这么干,而且干的这么漂亮。