Vim无法识别评论" //结束"当autoindent完整的verilog代码

时间:2014-03-21 02:08:24

标签: vim auto-indent

我现在正在使用gvim来编写verilog代码。当我使用自动缩进全文功能(命令:gg = G)时,gvim开始自动缩进全文。但是,gvim可以识别" //开始"但无法识别" //结束",这会导致错误的代码缩进。例如(在输入命令gg = G之后):

always@(posedge iClk) begin
    some codes.....
    if(condition....) begin
        some codes....
    end
    //if(condition..) begin
        //some commented out codes...
        //end
        if(condition...) begin
            some codes...
        end
    end

Gvim可以识别 // if(condition)begin 中的开始,并自动缩进下一行 //一些注释掉的代码...... < / strong>即可。但是当 //结束时,gvim会识别并对 // end 下面的所有代码进行错误的代码缩进。

有人可以告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

这看起来像标准verilog缩进函数的错误,是runtime/indent/verilog.vim标准vim分布的一部分。

在www.vim.org上搜索verilog缩进文件显示four options,其中包括一个标记为“修复veril缩进的错误修正:错误修正:以前的版本正在评估注释中的表达式”。你可以尝试那个,但它是最低评级的选项。你也可以试试GitHub。

答案 1 :(得分:0)

要添加到benjifishers answer,因为您没有指定缩进文件,将使用默认版本runtime/indent/verilog.vim

如果您还没有安装pathogen,我建议您这样做,它会切换语法&amp;缩进文件非常容易。

基本上它允许您将插件作为单个文件夹添加到~/.vim/bundle中,这也意味着删除您不想要的插件就像删除单个文件夹一样简单。这在尝试语言插件时非常有用,否则它们通常需要放入文件:

~/.vim/ftdetect
~/.vim/ftplugin
~/.vim/indent
~/.vim/syntax

Verilog上的vim.org选项可能评分较低,因为它不支持SystemVerilog关键字。

我有SystemVerilog plugin我使用但不认为重新缩进功能是固定的。

我的基于nickjones verilog_systemverilog 正在开发的最新版本似乎是nachumk's systemverilog.vim

注意:对于重新缩进,我在.vimrc中进行了此设置,从;g重新缩进并保留文件中的当前位置。

"http://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/
function! Preserve(command)
  " Preparation: save last search, and cursor position.
  let _s=@/
  let l = line(".")
  let c = col(".")
  " Do the business:
  execute a:command
  " Clean up: restore previous search history, and cursor position
  let @/=_s
  call cursor(l, c)
endfunction

map ;g :call Preserve("normal! gg=G")<CR>