我想使用外部Perl或Python脚本将Vim中的文本选择更改为title case。作为这些脚本的用户,您可以选择不大写的小词。
但是,我想仅在一行的一部分而不是整行上应用滤波器。有谁知道怎么做?
LaTeX源代码中的示例行:
\item the title case in latex and ...
应该成为
\item The Title Case in Latex and ...
以下命令不起作用:
:{visual}!{filter}
答案 0 :(得分:3)
所有ex命令都按行工作(由于vi / ex历史记录)。因此,不能仅对选定的单词使用过滤器,只能使用行。
这在:h 10.3
下的vim(版本8.0.x)的帮助文件中有记录:
注意:
使用可视模式选择行的一部分或使用CTRL-V
时 选择一个文本块,冒号命令仍将适用于整个 线。这可能会在未来的Vim版本中发生变化。
要直接跳转到此帮助部分,请尝试使用:helpg colon\ commands.*apply
。
供参考:可以通过:h ex-cmd-index
显示ex命令列表。
相关的sx.questions是:
答案 1 :(得分:1)
此示例部分正常工作,但不会将视觉选择文本中的最后一个单词大写。想法是通过留在Vim减少工作量。得到这个来处理视觉选择中的最后一个单词,你就在那里。 :)每个更新的规格,传递“\\ |”已删除的小单词列表,首字母大写。
" Visually select some text
":call title_case_selection:()
" and probably want to map it to some abbreviation
"
function title_case_selection:( list_of_words_bar_delimited )
let g:start_column=virtcol("'<") - 1
let g:end_column=virtcol("'>") + 1
let g:substitution_command=':s/\%>'.g:start_column.'v\<\(\w\)\(\w*\)\>\%<'.g:end_column.'v/\u\1\L\2/g'
call feedkeys ( g:substitution_command )
call feedkeys ("\<cr>", 't')
let g:substitution_command=':s/\%>'.g:start_column.'v\<\('.a:list_of_words_bar_delimited.'\)\>\%<'.g:end_column.'v/\L\1/g'
call feedkeys ( g:substitution_command )
call feedkeys ("\<cr>", 't')
endfunction
“abba zabba是一个非常好吃的糖果!&lt; - 视觉上选择这一行
:call title_case_selection:("Is\\|A")
答案 2 :(得分:1)