使用Vim将文件名转换为文件

Tom*_*ell 2 vim filenames insert

我有许多文本文件(700+),我需要将每个文件的名称放入文件中每一行的开头.

例如,对于文件名myfile0072.txt:

mike   160
jane   174
Run Code Online (Sandbox Code Playgroud)

myfile0072.txt mike 160
myfile0072.txt jane 174
Run Code Online (Sandbox Code Playgroud)

我无法访问Bash,C或Perl或其他任何工作.我可以在Vim中做些什么来获得结果吗?

DrA*_*rAl 7

这有两个阶段,首先将要编辑的所有文件都放到参数列表中,然后将文件名添加到行中.

1)将文件添加到参数列表中.

使用"gvim*.txt"启动vim(如果你的shell可以处理命令行中列出的700个文件),或者加载没有打开文件的gvim(所以参数列表为空)然后:

cd /path/to/files
" Get the list of files
let filelist = glob('*.txt')
" Add files to the argument list
for file in split(filelist, '\n')
    exe 'argadd ' . file
endfor
Run Code Online (Sandbox Code Playgroud)

编辑:

更简洁的方法是:

:cd /path/to/files
:exe 'args' glob('*.txt')
Run Code Online (Sandbox Code Playgroud)

编辑结束


2)对所有文件进行必要的过滤:

:argdo %s/^/\=expand('%:t') . ' '/ | w
Run Code Online (Sandbox Code Playgroud)

说明:

argdo 在参数列表中的每个文件上运行该命令.

%s/FROM/TO/ 用TO替换FROM

^ 是行的开头(因此替换将TO添加到行的开头)

\= 表示TO应该是表达式的结果

expand('%:t') 给出当前文件的名称(%),仅包括尾部(':t'),因此没有前导目录名.

. ' ' 附加一个空间.

| 是连接字符的命令,所以在替换后,它运行:

w,将文件写入磁盘.