【问题标题】:Filter ONLY several words (not the complete line) through an external command通过外部命令仅过滤几个单词(不是整行)
【发布时间】:2023-03-10 07:10:01
【问题描述】:

我想使用外部 PerlPython 脚本将 Vim 中的文本选择更改为 title case。作为这些脚本的用户,您可以选择不大写的小字。

但是,我只想将过滤器应用于一行的一部分,而不是整个行。有谁知道怎么做?

LaTeX 源代码中的示例行:

\item the title case in latex and ...

应该变成

\item The Title Case in Latex and ...

以下命令不起作用:

:{visual}!{filter}

【问题讨论】:

  • +1 第一个问题很好。您可以进行的一项改进是,您可以使用链接工具(glob 图标)嵌入链接,而不是编写链接文本。例如,如果你编辑你的帖子,你可以在第二句中选择“维基百科”,点击编辑框上方的链接图标,然后将链接地址粘贴到那里。
  • 作为一个新用户,我只能创建两个链接。感谢您对问题的支持和编辑。
  • 还有一个关于tex.sx的问题,缺点是提出的基于tex的解决方案加上stringstrings这个包,使得tex文件的编译非常慢。
  • 现在有一个名为titlecaps的新乳胶包。

标签: vim


【解决方案1】:

所有 ex 命令都按行工作(由于 vi/ex 历史记录)。因此,不能只对选定的单词使用过滤器,只能按行使用。

这在:h 10.3下的vim(8.0.x版)的帮助文件中有记录:

注意:
当使用可视模式选择一行的一部分,或使用CTRL-V 选择一个文本块,冒号命令仍然适用于整个 线。这可能会在未来版本的 Vim 中改变。

要直接跳转到此帮助部分,请尝试使用:helpg colon\ commands.*apply

供参考:可以通过:h ex-cmd-index显示ex命令列表。

相关的 sx.questions 是:

【讨论】:

    【解决方案2】:

    此示例部分有效,但未将视觉选择文本中的最后一个单词大写。想法是通过留在 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 是一种非常美味的糖果!

    :call title_case_selection:("Is\\|A")

    【讨论】:

    • 是否可以调整你的vim功能让用户选择不大写的小字。抱歉,我最初的问题并不清楚这一点。我仍然希望 vim 提供一般要求的功能。
    • 总之,已经有vim脚本了。 titlecase.vim 只是执行全大写。因此,脚本名称具有误导性,并不能解决它。 cream-capitalization 实际上做了我想要的。这个插件的一个小问题困扰着我:使用 v$ cream-capitalization 进行视觉选择会将选择移动到新行中。这很烦人。您必须将光标向左移动一步。但是,我很感兴趣是否可以通过使用外部命令来解决我的问题。
    • 如果需要,您可以将缩写映射到 v$h,例如 vmap $ $h,这样您就不必在 $ 之后物理按 h,在可视模式下。现在 v$ 会做你想做的事。听起来像这样,奶油大写应该是你所需要的。祝你好运!
    【解决方案3】:

    最后,我找到了一个符合我想法的插件:

    vis - 扩展的可视化模式命令、替换和搜索 vimscript #1159 (github mirror)

    :'&lt;,'&gt;B !titlecase

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2023-03-12
      • 2019-08-10
      相关资源
      最近更新 更多