【问题标题】:Function to Comment Multiple Lines Vimrc注释多行 Vimrc 的函数
【发布时间】:2016-07-30 00:29:46
【问题描述】:

所以我目前喜欢这种在 vim 中注释多行的解决方案:

  1. CTRL-v(进入可视块模式)
  2. 选择要评论的行
  3. Shift-i(进入插入模式)
  4. 输入您的语言使用的任何注释字符
  5. ESC ESC(按两次退出键可以更快地显示结果)

但我需要一些帮助,将这些步骤映射到我的 vimrc 文件中。 我目前使用以下注释行:

vnoremap ;/ <C-v>0I// <ESC>

对于那些想要解释该命令的作用的人:

当您处于可视模式时,您基本上键入;/ 来使用它(可视、可视线和可视块模式都可以工作,因为&lt;C-v&gt; 部分会强制您进入可视块模式,这是正确的)。

0I 部分会将您置于行首的插入模式。

// &lt;ESC&gt; 部分将插入注释字符// 并让您回到正常模式。

我需要帮助的部分是取消注释行。如何在我的 vimrc 中编写一个基本上可以让我切换 // 字符的函数?

理想情况下,解决方案将涉及以下内容:

  1. 选择行
  2. ;/
  3. 如果没有// 字符,那么它将插入它们
  4. 如果有 // 字符,那么它将删除它们

【问题讨论】:

  • 我们有 vi.stackexchange.com 。您可能应该使用一个函数进行注释,另一个函数用于取消注释,然后允许范围不需要 .
  • 0I ? I 足以插入行首!
  • 太酷了。我不知道 vi.stachexchange。我个人喜欢只有一个功能,这样你只需要记住一个命令。我也更喜欢使用视觉选择而不是使用范围
  • 也可以查看tyru/caw.vim
  • 0I?它是0iI。此外,编写注释函数是 vimscript 中最常见的第一步。我建议改用插件,比如 Tim Pope 的评论。

标签: vim comments


【解决方案1】:

把它放在你的.vimrc 文件中:

vnoremap <silent> ;/ :call ToggleComment()<cr>

function! ToggleComment()
        if matchstr(getline(line(".")),'^\s*\/\/.*$') == ''
                :execute "s:^://:"
        else
                :execute "s:^\s*//::"
        endif
endfunction

【讨论】:

  • 它工作得很好,但你能解释一下它是如何工作的吗? @Meninx
  • 它检查每一行是否有 // 在开头通过 matchstr 函数。如果是,它通过删除来进行替换,否则添加它们。 (请原谅我的简短-mobile-)可以吗?
【解决方案2】:

检查评论插件。它允许为所有语言设置一个绑定。

【讨论】:

    【解决方案3】:

    使用 python 脚本很容易

    function! Comment()
    python3 << EOF
    import vim
    r = vim.current.range
    line = vim.current.buffer[r.start]
    if line.startswith('// '):
        vim.current.buffer[r.start] = vim.current.buffer[r.start].replace('// ', '')
    else:
        vim.current.buffer[r.start] = '// ' + vim.current.buffer[r.start]
    EOF
    endfunction
    
    " ctrl slash
    noremap <C-_> :call Comment()<CR>
    

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2011-01-03
      • 2013-12-15
      • 1970-01-01
      • 2021-10-21
      相关资源
      最近更新 更多