linux下gvim设置SystemVerilog高亮教程

linux下gvim设置SystemVerilog高亮教程

网上有很多详细教程,我使用的是单用户配置,不需要root权限。

vim/gvim默认没有systemverilog语法高亮,需要自己设置。

一、 具体方法如下

  1. 在/home/用户目录下,打开 .vim隐藏文件夹,没有的话需要创建 。
  2. 在.vim隐藏文件下,创建 syntax文件夹
  3. systemverilog.vim 复制到syntax目录下(vim如下)。
    如果不能复制,需要自己创建systemverilog.vim文件,再用vim/gvim打开编辑就好。
touch systemverilog.vim
  1. 输入cd ~ 进入开始的/home/用户目录,在用户目录下,创建一个 .vimrc文件 ,再用vim/gvim打开编辑就好。
touch .vimrc

之后在.vimrc中输入:

set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
au BufRead,BufNewFile *.sv set filetype=systemverilog
  1. 最后 source .vimrc。
  2. 再次打开.sv文件就可以成功显示高亮。

二、systemverilog.vim 文件

" Vim syntax file
" Language: SystemVerilog
" Maintainer: Stephen Hobbs <stephenh@cadence.com>
" Last Update:  Wed Jun 14 15:56:00 BST 2006
" Built on verilog.vim from vim63

" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
   syntax clear
elseif exists("b:current_syntax")
   finish
endif

" Set the local value of the 'iskeyword' option
if version >= 600
   setlocal iskeyword=@,48-57,_,192-255
else
   set iskeyword=@,48-57,_,192-255
endif

" Taken from the SystemVerilog 3.1a Annex B:
syn keyword systemverilogStatement   alias always always_comb always_ff always_latch
syn keyword systemverilogStatement   and assert assign assume automatic before begin
syn keyword systemverilogStatement   bind bins binsof bit break buf bufif0 bufif1
syn keyword systemverilogStatement   byte case casex casez cell chandle class clocking
syn keyword systemverilogStatement   cmos config const constraint context continue cover
syn keyword systemverilogStatement   covergroup coverpoint cross deassign default
syn keyword systemverilogStatement   defparam design disable dist do edge else end
syn keyword systemverilogStatement   endcase endclass endclocking endconfig endfunction
syn keyword systemverilogStatement   endgenerate endgroup endinterface endmodule
syn keyword systemverilogStatement   endpackage endprimitive endprogram endproperty
syn keyword systemverilogStatement   endspecify endsequence endtable endtask enum event
syn keyword systemverilogStatement   expect export extends extern final first_match for
syn keyword systemverilogStatement   force foreach forever fork forkjoin function generate
syn keyword systemverilogStatement   genvar highz0 highz1 if iff ifnone ignore_bins
syn keyword systemverilogStatement   illegal_bins import incdir include initial inout
syn keyword systemverilogStatement   input inside instance int integer interface intersect
syn keyword systemverilogStatement   join join_any join_none large liblist library local
syn keyword systemverilogStatement   localparam logic longint macromodule matches medium
syn keyword systemverilogStatement   modport module nand negedge new nmos nor
syn keyword systemverilogStatement   noshowcancelled not notif0 notif1 null or output
syn keyword systemverilogStatement   package packed parameter pmos posedge primitive
syn keyword systemverilogStatement   priority program property protected pull0 pull1
syn keyword systemverilogStatement   pulldown pullup pulsestyle_onevent pulsestyle_ondetect
syn keyword systemverilogStatement   pure rand randc randcase randsequence rcmos
syn keyword systemverilogStatement   real realtime ref reg release repeat return
syn keyword systemverilogStatement   rnmos rpmos rtran rtranif0 rtranif1 scalared sequence
syn keyword systemverilogStatement   shortint shortreal showcancelled signed small solve
syn keyword systemverilogStatement   specify specparam static string strong0 strong1 struct
syn keyword systemverilogStatement   super supply0 supply1 table tagged task this
syn keyword systemverilogStatement   throughout time timeprecision timeunit tran
syn keyword systemverilogStatement   tranif0 tranif1 tri tri0 tri1 triand trior trireg type
syn keyword systemverilogStatement   typedef union unique unsigned use var vectored virtual
syn keyword systemverilogStatement   void wait wait_order wand weak0 weak1
syn keyword systemverilogStatement   while wildcard wire with within wor xnor xor

" LRM 3.7 String methods:
syn keyword systemverilogStatement   len getc putc toupper tolower compare
syn keyword systemverilogStatement   icompare substr 
syn keyword systemverilogStatement   itoa hextoa octtoa bintoa realtoa
syn keyword systemverilogStatement   atoi atohex atooct atobin atoreal
" LRM 3.8 events:
syn keyword systemverilogStatement   triggered
" LRM 3.10 methods for enumerated types:
syn keyword systemverilogStatement   first last next prev num name
" LRM 4.6 Dynamic Arrays:
syn keyword systemverilogStatement   delete
" LRM 4.10 Associative Array methods:
syn keyword systemverilogStatement   num exists
" LRM 4.15.1 Array locator methods:
syn keyword systemverilogStatement   find find_index find_first find_first_index
syn keyword systemverilogStatement   find_last find_last_index min max unique unique_index
" LRM 4.15.2 Array ordering methods:
syn keyword systemverilogStatement   reverse sort rsort shuffle
" LRM 4.15.3 Array reduction methods:
syn keyword systemverilogStatement   sum product
" LRM 4.15.4 Array iterator query:
syn keyword systemverilogStatement   index
"" LRM 7.10.1 Builtin package:
syn keyword systemverilogStatement   std
" LRM Annex C standard library
syn keyword systemverilogStatement   get put try_get try_put peek try_peek
syn keyword systemverilogStatement   status kill self await suspend resume
" LRM Annex D List methods
syn keyword systemverilogStatement   next prev eq neq data
syn keyword systemverilogStatement   size empty push_front push_back
syn keyword systemverilogStatement   front back pop_front pop_back
syn keyword systemverilogStatement   start finish insert insert_range
syn keyword systemverilogStatement   erase erase_range set swap clear purge

" New time specification:
" #1step or #1ps
syn match   systemverilogNumber "\<[0-9_]\+\([munpf]\|\)s\>"
syn match   systemverilogNumber "\<[0-9_]\+step\>"

" Original systemverilog syntax below here

syn keyword systemverilogTodo contained TODO

syn match   systemverilogOperator "[&|~><!)(*#%@+/=?:;}{,.\^\-\[\]]"

syn region  systemverilogComment start="/\*" end="\*/" contains=systemverilogTodo
syn match   systemverilogComment "//.*" contains=systemverilogTodo

"syn match   systemverilogGlobal "`[a-zA-Z0-9_]\+\>"
syn match systemverilogGlobal "`celldefine"
syn match systemverilogGlobal "`default_nettype"
syn match systemverilogGlobal "`define"
syn match systemverilogGlobal "`else"
syn match systemverilogGlobal "`elsif"
syn match systemverilogGlobal "`endcelldefine"
syn match systemverilogGlobal "`endif"
syn match systemverilogGlobal "`ifdef"
syn match systemverilogGlobal "`ifndef"
syn match systemverilogGlobal "`include"
syn match systemverilogGlobal "`line"
syn match systemverilogGlobal "`nounconnected_drive"
syn match systemverilogGlobal "`resetall"
syn match systemverilogGlobal "`timescale"
syn match systemverilogGlobal "`unconnected_drive"
syn match systemverilogGlobal "`undef"
syn match   systemverilogGlobal "$[a-zA-Z0-9_]\+\>"

syn match   systemverilogConstant "\<[A-Z][A-Z0-9_]\+\>"

syn match   systemverilogNumber "\(\<\d\+\|\)'[bB]\s*[0-1_xXzZ?]\+\>"
syn match   systemverilogNumber "\(\<\d\+\|\)'[oO]\s*[0-7_xXzZ?]\+\>"
syn match   systemverilogNumber "\(\<\d\+\|\)'[dD]\s*[0-9_xXzZ?]\+\>"
syn match   systemverilogNumber "\(\<\d\+\|\)'[hH]\s*[0-9a-fA-F_xXzZ?]\+\>"
syn match   systemverilogNumber "\<[+-]\=[0-9_]\+\(\.[0-9_]*\|\)\(e[0-9_]*\|\)\>"

syn region  systemverilogString start=+"+ skip=+\\"+ end=+"+ contains=systemverilogEscape
syn match   systemverilogEscape +\\[nt"\\]+ contained
syn match   systemverilogEscape "\\\o\o\=\o\=" contained

" Directives
syn match   systemverilogDirective   "//\s*synopsys\>.*$"
syn region  systemverilogDirective   start="/\*\s*synopsys\>" end="\*/"
syn region  systemverilogDirective   start="//\s*synopsys dc_script_begin\>" end="//\s*synopsys dc_script_end\>"

syn match   systemverilogDirective   "//\s*\$s\>.*$"
syn region  systemverilogDirective   start="/\*\s*\$s\>" end="\*/"
syn region  systemverilogDirective   start="//\s*\$s dc_script_begin\>" end="//\s*\$s dc_script_end\>"

"Modify the following as needed.  The trade-off is performance versus
"functionality.
syn sync lines=80

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_systemverilog_syn_inits")
   if version < 508
      let did_systemverilog_syn_inits = 1
      command -nargs=+ HiLink hi link <args>
   else
      command -nargs=+ HiLink hi def link <args>
   endif

   " The default highlighting.
   HiLink systemverilogCharacter       Character
   HiLink systemverilogConditional     Conditional
   HiLink systemverilogRepeat   Repeat
   HiLink systemverilogString   String
   HiLink systemverilogTodo   Todo
   HiLink systemverilogComment  Comment
   HiLink systemverilogConstant  Constant
   HiLink systemverilogLabel   Label
   HiLink systemverilogNumber   Number
   HiLink systemverilogOperator  Special
   HiLink systemverilogStatement  Statement
   HiLink systemverilogGlobal   Define
   HiLink systemverilogDirective  SpecialComment
   HiLink systemverilogEscape   Special

   delcommand HiLink
endif

let b:current_syntax = "systemverilog"

" vim: ts=2

  • 12
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: gvim 是一款开源的文本编辑器,它拥有强大的编辑功能和可扩展的插件系统,常用于编写程序代码和编辑大型文本文件。然而,由于大文件包含大量的内容,gvim 打开大文件的时间会比较长。 首先,打开大文件需要加载和解析文件的内容,特别是当文件大小超过几百兆字节时。这个过程需要耗费大量的计算资源和内存,因此 gv im 打开大文件的速度会受到计算机硬件性能的限制。 其次,gvim 有一些针对大文件的优化措施,例如可通过 Vim 编辑器设置文件的打开模式、自动备份、文件类型检测等功能。但当大文件开启语法高亮、自动补全以及其他复杂功能时,更多的计算和内存资源将被占用,导致打开时间变长。 最后,其他因素如操作系统的性能、系统负载以及其他正在运行的程序也会影响 gvim 打开大文件的速度。 为了加快 gvim 打开大文件的速度,我们可以尝试以下优化措施:1.升级计算机硬件,特别是增加内存和存储容量。2.禁用一些不必要的插件或功能,如语法高亮、自动补全等。3.使用适当的打开模式,如只读模式或只显示部分内容模式。4.规划好系统的负载,关闭其他占用资源的程序。5.将大文件分割成多个较小的文件,以方便编辑和打开。 综上所述,gvim 打开大文件时间长主要受到计算机硬件性能、文件内容大小、配置设置和其他系统资源占用的影响。通过合理的优化和操作,我们可以加快 gvim 打开大文件的速度。 ### 回答2: gvim打开大文件时间长的原因有两点: 1. 文件大小:大文件通常包含大量的文本内容,这需要gVim花费更长的时间来读取和加载文件内容。特别是在低性能的计算机上,处理大文件可能会更加耗时。 2. 缓冲区加载:gVim会将文件内容加载到内存中的缓冲区中,以便进行编辑和处理。对于大文件来说,加载整个文件的内容可能会导致缓冲区的大小增加,这需要更多的时间和系统资源来完成加载操作。 为了减少gvim打开大文件的时间,可以考虑以下一些方法: 1. 使用分屏模式:可以将大文件分割成多个较小的部分进行编辑和查看,这样可以减少单个缓冲区的负荷,提高响应速度。 2. 关闭自动格式化和语法检查:在打开大文件时,可以暂时关闭自动格式化和语法检查功能,以减轻gVim的负荷,加快文件加载速度。 3. 使用二进制模式打开文件:在使用gvim打开大文件时,可以尝试使用二进制模式打开文件,即在命令行中输入"gvim -b filename",这样可以加快文件的读取速度。不过需要注意,使用二进制模式打开文件可能会导致一些文本格式问题。 4. 升级硬件:如果经常需要处理大文件,可以考虑升级计算机的硬件配置,例如增加内存容量或者使用更快的存储设备,以提高系统的实时响应能力。 总的来说,gvim打开大文件时间长是由于文件的大小和缓冲区加载所带来的负荷增加。通过合理使用软件功能和优化硬件配置,可以减少这种时间延迟。 ### 回答3: 将一个大文件打开需要比较长的时间,这是因为 gvim 在开始加载文件时会对文件进行一些处理以便于后续编辑。下面是一些可能导致 gvim 打开大文件时间较长的原因: 1. 文件大小:大文件通常包含较多的文本内容,因此需要较长的时间来读取和加载这些内容。尤其是在硬盘速度较慢的情况下,加载时间可能会更长。 2. 内存限制:gvim 在内存中存储文件内容并提供编辑功能。当文件较大时,可能会超出计算机的可用内存限制,这会导致系统将部分文件内容交换到硬盘,从而增加文件打开的时间。 3. 语法高亮和插件:gvim 提供了丰富的功能和插件,其中包括语法高亮功能。当打开大文件时,gvim 需要对文件进行语法分析以实现正确的高亮显示,这可能会导致加载时间较长。 4. 硬件性能:gvim 的打开速度还与计算机的硬件性能有关。较快的处理器、大容量的内存和高速的硬盘都会对打开大文件的速度产生影响,较低的硬件性能可能导致加载时间延长。 为了加快 gvim 打开大文件的速度,可以考虑以下方法: 1. 增加内存:如果计算机可用内存不足,可以考虑增加内存容量,以便更好地处理大文件。 2. 禁用语法高亮和插件:可以在打开大文件时临时禁用语法高亮和不必要的插件,以减少加载时间。 3. 使用更快的硬件:优化计算机的硬件配置,如更快的处理器和硬盘,可以提高 gvim 打开大文件的速度。 4. 拆分大文件:如果可能的话,可以将大文件拆分成更小的文件,这样打开时只需要加载部分内容,从而提高打开速度。 总之,gvim 打开大文件时间长可能是由于文件大小、内存限制、语法高亮和硬件性能等因素导致的。通过优化硬件配置、增加内存和禁用不必要的功能,可以提高 gvim 打开大文件的速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值