Ric*_*ron 2 vim regex batch command-line
我有一个带有条目的纯文本文件
firstAuthorLastName_titleFirstWord_YYYY
Run Code Online (Sandbox Code Playgroud)
我改成
firstAuthorLastNameYYYYtitleFirstWord
Run Code Online (Sandbox Code Playgroud)
s//
在 Vim 中使用以下命令。^[1]
%s/\([a-z]\+\)_\([a-z]\+\)_\([0-9]\{4}\)/\1\3\2/g
Run Code Online (Sandbox Code Playgroud)
但我想一遍又一遍地执行这个命令。看来,我应该能够与Windows批处理脚本,并在为此-c
标志gvim.exe
。但我无法让它工作。
我有一个包含以下内容的 Windows 批处理脚本。
gvim -c "%s/\([a-z]\+\)_\([a-z]\+\)_\([0-9]\{4}\)/\1\3\2/g" herron.bib
Run Code Online (Sandbox Code Playgroud)
但我收到了消息E486: Pattern not found: \([a-z]\+\)_\([a-z]\+\)_\([0-9]\{4}\)
。有没有办法重用/自动化这个s//
命令?我知道我可以通过我的前命令历史向上箭头,但我想要一些更持久和可靠的东西。
[^1] FWIW,这是我从Zotero导出的 BibTeX .bib 文件。再往下游,我使用vim-pandoc用Markdown写笔记。下划线使使用 vim-pandoc“整洁”功能变得更加困难,因此我将其删除。我每周更新 .bib 几次并从 Zotero 重新导出它,所以我还需要每周运行几次这个正则表达式。
我没有发现任何问题,显然该模式已正确传递给 Vim,因此它应该可以工作:-(
除非你真的需要特殊的Vim的功能,你可能关闭使用更好的非交互式工具一样sed
,awk
或Perl / Python的/ Ruby的/你最喜欢的脚本语言在这里。
也就是说,您可以非交互式地使用 Vim:
对于非常简单的文本处理(即使用 Vim 就像增强的 'sed' 或 'awk',也许只是受益于:substitute
命令中增强的正则表达式),使用Ex-mode。
REM Windows
call vim -N -u NONE -n -es -S "commands.ex" "filespec"
Run Code Online (Sandbox Code Playgroud)
注意:静默批处理模式 ( :help -s-ex
) 会弄乱 Windows 控制台,因此您可能需要cls
在 Vim 运行后进行清理。
根据您的描述,您是否想要完全自动化或只是更容易回忆尚不完全清楚。如果您不介意从 Vim 中手动(但快速)应用该命令,那么如何:
a) 自定义命令
:command! TidyNames %s/\([a-z]\+\)_\([a-z]\+\)_\([0-9]\{4}\)/\1\3\2/g
Run Code Online (Sandbox Code Playgroud)
b) 自定义映射
:nnoremap <Leader>tn :%s/\([a-z]\+\)_\([a-z]\+\)_\([0-9]\{4}\)/\1\3\2/g<CR>
Run Code Online (Sandbox Code Playgroud)
这两个都可以放在您的~/.vimrc
, 或(带有<buffer>
修饰符)中特定于文件类型的~/.vim/after/ftplugin/tex.vim
.
归档时间: |
|
查看次数: |
1791 次 |
最近记录: |