【问题标题】:Vim can not recognize comment "//end" when autoindent full verilog code自动缩进完整的verilog代码时,Vim无法识别注释“//end”
【发布时间】:2014-03-21 02:08:23
【问题描述】:

我现在正在使用 gvim 编写 verilog 代码。当我使用自动缩进全文功能(命令:gg=G)时,gvim 开始自动缩进全文。但是gvim能识别“//begin”却不能识别“//end”,导致代码缩进错误。例如(输入命令 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中的begin,并自动缩进下一行//一些注释掉的代码...。但是到了 //end 时,gvim 会认错,并对 //end 下面的所有代码进行错误的代码缩进。

谁能告诉我如何解决这个问题?

【问题讨论】:

  • 您能否将您的设置与您如何将文件识别为verilog 以及您在.vimrc 中加载的任何特殊verilog 语法文件相关联
  • 对不起,Morgan,我不知道 vim 是如何识别 verilog 文件的,我没有对此进行任何配置。所有配置都是默认的。当我打开文件扩展名为 .v 的文件时,vim 会自动识别文件类型。
  • 而且.vimrc 中的verilog 没有特殊语法。

标签: vim auto-indent


【解决方案1】:

这看起来像是标准 verilog 缩进功能的一个错误,它是标准 vim 发行版runtime/indent/verilog.vim 的一部分。

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

【讨论】:

  • 谢谢你,本吉费舍尔! vim.org 上的缩进文件确实解决了这个问题。我不知道为什么这是评分最低的选项,但这个文件有效。谢谢!
【解决方案2】:

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

如果你还没有安装pathogen,我建议你这样做,它使切换语法和缩进文件变得非常容易。

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

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

vim.org 上的 Verilog 选项的评价可能很低,因为它不支持 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>

【讨论】:

  • 谢谢你,摩根!很高兴你回复我并告诉我关于系统verilog和插件的解决方案。我会在你的答案中尝试 .vim 文件。谢谢!
猜你喜欢
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2021-06-22
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多