vim 以在整个文件上执行的参数启动文件

vim start file with parameter which executes on the whole file

我使用 csv.vim 插件。当我启动一个 csv 文件时,插件会完成他的工作。我经常需要命令:ArrangeColumn,它作用于光标所在的当前行。要安排整个文件,我 select 所有内容和 运行 命令。

现在我希望在打开 csv 文件时始终有这个。我将 modelines 作为一个选项查看,但您只能在那里设置选项。无法调用命令。

另一种选择是使用参数 -c 启动 csv 文件,但我不知道如何将整个文件 select 到 运行 命令 :ArrangeColumn

gvim -c :ArrangeColumn foo.csv # Arranges the first line

我通常用:%s这样做,但这不起作用?

gvim -c %sArrangeColumn foo.csv # will clearly will not work.... 

如何启动一个 csv 文件并在完整文件上初始调用命令:ArrangeColumn

通常函数本身应该处理整个文件。

所以要用要执行的命令启动gvim/vim/vi,你可以这样调用:

vim -c "call ArrangeColumn()" foo.csv

或:

vim +"call ArrangeColumn()" foo.csv

要保存并退出,请添加 -cwq 参数。

例如,这里是删除行尾空格的函数:

" Removes superfluous white space from the end of a line
function! RemoveWhiteSpace()
    :%s/\s\+$//e
endfunction

所以你可以打电话:

vim +"call RemoveWhiteSpace()" foo.txt

你很接近。在:%s中,%范围1,$寻址整个缓冲区的快捷方式),s[ubstitute]是命令.由于 :ArrangeColumn 也有一个范围,您也可以在前面加上 %

gvim -c %ArrangeColumn foo.csv

有关详细信息,请参阅 :help :range

备选

如果您想对 所有 个 CSV 文件执行此操作,您可以创建一个包含以下内容的脚本 ~/.vim/after/ftplugin/csv.vim

%ArrangeColumn

这将在 csv.vim 插件后执行 并将命令应用于每个打开的 CSV 缓冲区。您可以使用 if expand('%') =~ '...' 条件额外包装命令,以仅将其应用于某些 CSV 文件。

对于实际问题:"start file with parameter which executes on the whole file" 您可以使用 autocmd 运行 特定文件类型的特定触发器

au BufRead *.csv 1,$ArrangeColumn

只要在 csv 文件上打开或使用“e”,这将 运行 对整个文件 1,$ 使用 ArrangeColumn 命令。

此外,如果需要,您可以映射一个键以重新执行此操作:

map AC <C-C>:1,$ArrangeColumn<CR>

为自己更改主键组合 (AC)。