使用缩写插入注释

时间:2016-06-29 10:13:16

标签: vim

我正在尝试在我的.vimrc中设置一个缩写,它会在我的CSS文件中为标题级别的注释插入注释模板。

我要插入的评论是:

/* ==========================================================================
   #
   ========================================================================== */

然后我会跳回#并在那里添加我的标题(例如BUTTONS)。

我试图设置的缩写如下所示:

iab comsec·
\/* ==========================================================================
\<Cr>#
\<Cr>========================================================================== */

(其中·表示尾随空格。)

这个感觉非常粗糙,但具体问题是,如果尝试在我的CSS中删除comsec,它会开始将其包装在更多中评论。输出如下:

/* ==========================================================================
 * #
 * ========================================================================== */

注意第2行和第3行开头的两个*

有没有办法告诉vim不要尝试聪明,只是完全放弃我告诉它的内容?一种阻止vim试图在评论中包装评论的方法吗?

我不是一个特别讨厌的vim用户,所以我很有可能让事情过于复杂,或者遗漏了一些明显的东西,或者使用了错误的工具。

谢谢!

4 个答案:

答案 0 :(得分:1)

如果您是那种能够跟踪您的个人用途的人,那么这并不是很有趣但有效。您可以将外部命令的输出导入缓冲区,因此我在.vimrc文件中放置了这样的映射:

"bc = block comment
map ,bc :read! python ~/my_personal_utils/insert_css_comment.py

所以,我只需输入&#34;,bc&#34;添加评论。至少在我的Mac上,这使我处于命令模式,因此我的光标位于&#39; .py&#39;我可以快速输入像BUTTONS这样的参数(即python脚本采用可选参数)。

答案 1 :(得分:0)

这是一种更简单的方式来插入您的评论,如果该行被评论模板包围,则每次都会检查。

您所要做的就是在新行上写下您的评论,然后在插入模式期间按; 。 (你可以改变字符; 你想要的任何组合。

评论模板由变量l:startl:beginl:end设置 因此,您可以根据需要更改空格 = 的数量。 如果您想完全更改模板,请记住您还需要更改变量l:matchprevl:matchhierl:matchnext的正则表达式。

inoremap <silent> ; <Esc>mx:call Comment()<cr>i<Right>

function! Comment()
    let l:start= "/* ====="
    let l:begin=" # "
    let l:end=  " ==== */"
    let l:next=getline(line(".")+1)
    let l:hier=getline(line("."))
    let l:prev=getline(line(".")-1)
    let l:matchnext= matchstr( l:next , '^\s*=\+\s*\*/\s*$')
    let l:matchhier= matchstr( l:hier , '^\s*#\s*.*$')
    let l:matchprev= matchstr( l:prev , '^\s*/\*\s*=\+\s*$')
    if l:matchnext != '' && l:matchprev != '' && l:matchhier != ''
        return 0
    else
        execute ":s:^.*$:".l:start."\r".l:begin."&\r".l:end."\r:"
        "the number 3 is the length of the variable l:begin
        normal! `xj3l

    endif
endfunction

将此代码写入另一个文件 scriptname ,然后您可以通过首先在命令模式中键入:so scriptname

来使用任何css文件中的映射

另一种方法是将所有内容简单地放在.vimrc文件中

答案 2 :(得分:0)

这是一个执行此操作的功能。

      :function! Comment()
      :normal! i/*
      :normal! 80a=
      :normal! o#
      :normal! o
      :normal! 80i=
      :normal! a*/
      :endfunction

您可以将其放入vimrc文件中并为此创建命令或地图。

命令

        :cmap comsec call Comment()

您可以将光标放在一行上,然后调用此命令。

或插入模式映射

        :imap comsec <ESC>:comsec<CR>

答案 3 :(得分:0)

作为替代方案,我建议用nerdcommenter评论/取消注释几个关键笔画。

或者,甚至更好,ultisnips。您可以轻松地为这些标题制作自己的模板:

  1. 打开.css文件
  2. exec command : UltiSnipsEdit
  3. 创建自己的剪辑:
  4.   

    摘要标题&#34;标题评论&#34;

         

    / * ===================================

         

    * $ {1}

         

    * =================================== * /

         

    endsnippet