【问题标题】:Vim mapping with user input带有用户输入的 Vim 映射
【发布时间】:2018-08-23 16:03:17
【问题描述】:

我想知道是否可以在 Vim 中创建一个映射(用于正常模式),允许用户在映射执行之前输入。

我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望该命令允许输入我正在搜索的内容,然后在输入时执行。

这正是我想要的:

nmap F :grep! "*user input*"<CR>:cw<CR>

我不知道如何暂停并接受用户输入。我什至以正确的方式思考这个问题吗?有没有更好的方法来做我想做的事?

【问题讨论】:

    标签: vim


    【解决方案1】:

    有一个函数input(prompt [, text [, completion]])

    结果是一个字符串,它是用户在 命令行。 {prompt} 参数要么是提示字符串,要么是 空白字符串(无提示)。可以在提示中使用 '\n' 开始新的一行。

    (来自:help input())。

    对于:grep! 之类的内容,您可能必须使用字符串表达式构建命令,然后使用:execute 它。

    【讨论】:

    • 您能否举个例子来说明“使用字符串表达式构建命令”的含义?谢谢!
    • 类似:exec ":grep! ".input("grep what? where?")
    【解决方案2】:

    另一种方法是创建自定义命令并使用映射来调用新命令。

    command! -nargs=+ -complete=file -bar Grep grep! <args>|cw
    

    现在您可以创建映射:

    nnoremap <f2> :Grep<space>
    

    您可能还不想映射 F 键,因为它是一个非常方便的映射。

    如需更多帮助,请参阅:

    :h :command
    

    【讨论】:

    • 好答案。我会将它映射为nnoremap &lt;f2&gt; :Grep&lt;space&gt;,以便更容易知道你的vimrc中的空间。
    【解决方案3】:

    另见this answer on vi.stackexchange by @EvergreenTree

    简而言之:映射一个表达式以使用input()

    nnoremap &lt;expr&gt; ;n "&lt;ESC&gt;Go&lt;CR&gt;" . input("Input your text here: ", "Prepend this string to my input by default -") . " &lt;&lt;- that was your input.&lt;ESC&gt;"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多