如何在Vim中编写连续的命名文件?

时间:2009-05-02 00:07:39

标签: vim

我已经需要这几次了,只是现在它发生在我身上,也许Vim可以为我做这件事。我经常保存数量很多的文件,其名称无关紧要(无论如何它们都是临时的)。

我有一个充满文件的目录:file001.txt,file002.txt ...(它们实际上并没有命名为“filexxx.txt” - 但是为了讨论......)。我经常保存一个新的,并命名为file434.txt。既然这是我经常做的事情,我想跳过命名检查部分。

是否可以通过vim脚本检查目录中的最后一个filexxx.txt,并将当前缓冲区保存为filexxx + 1。我应该怎么写这样的东西?有没有人以前做过这样的事情?

所有建议都表示赞赏。

3 个答案:

答案 0 :(得分:10)

将以下内容放入~/.vim/plugin/nextunused.vim

" nextunused.vim

" find the next unused filename that matches the given pattern
" counting up from 0.  The pattern is used by printf(), so use %d for
" an integer and %03d for an integer left padded with zeroes of length 3.
function! GetNextUnused( pattern )
  let i = 0
  while filereadable(printf(a:pattern,i))
    let i += 1
  endwhile
  return printf(a:pattern,i)
endfunction

" edit the next unused filename that matches the given pattern
command! -nargs=1 EditNextUnused :execute ':e ' . GetNextUnused('<args>')
" write the current buffer to the next unused filename that matches the given pattern
command! -nargs=1 WriteNextUnused :execute ':w ' . GetNextUnused('<args>')

" To use, try 
"   :EditNextUnused temp%d.txt
"
" or
"
"   :WriteNextUnused path/to/file%03d.extension
"

因此,如果您位于temp0000.txttemp0100.txt已经使用过的目录中 你执行:WriteNextUnused temp%04d.txt,它会将当前缓冲区写入temp0101.txt

答案 1 :(得分:1)

你可以发布的脚本怎么样?这是一个快速的python脚本,可以完成你需要的。将脚本保存为“highest.py”到路径中的某个位置。从VIM进入命令模式并输入

:!python highest.py“file * .txt”

它返回当前目录中编号最大的文件,或者没有文件匹配的消息。它处理前导0,可以推广出更复杂的模式。

#!/usr/bin/python
#
# Finds the highest numbered file in a directory that matches a given pattern
# Patterns are specified with a *, where the * will be where the number will occur.
#

import os
import re
import sys

highest = "";
highestGroup = -1;

if (len(sys.argv) != 2):
        print "Usage: python high.py \"pattern*.txt\""
        exit()

pattern = sys.argv[1].replace('*', '(\d*)')

exp = re.compile(pattern)

dirList=os.listdir(".")

for fname in dirList:
        matched = re.match(exp, fname)
        if matched:
                if ((highest == "") or (int(matched.group(1)) > highestGroup)):
                        highest = fname
                        highestGroup = int(matched.group(1))

if (highest == ""):
        print "No files match the pattern: ", pattern
else:
        print highest

答案 2 :(得分:0)

您可以使用许多强大的语言(取决于您的vim的编译方式)为vim编写脚本,例如perl,python,ruby。如果您可以使用使用适当解释器为其中一种语言编译的vim,这可能是您编写所需脚本的最简单方法。