关于golang:使用BKLexer进行词法分析

前几天我曾经封装好了词法分析器并命名BKLexer,以后BKLexer别离反对Go/C++/Python。 程序代码放在Github我的项目当中: 点进我的项目页 能够参考每一个版本的try_lexer代码进行学习,上面以Go为例: package mainimport ( "fmt" "strconv" "./bklexer")func main() { fmt.Println("Test Code:") code := "申明 变量 = PI * 100 - fda\n1024 * 4 * 3.14 ### \n123" fmt.Println(code) fmt.Println("--------------------------------") lexer := BKLexer.NewLexer() lexer.AddRule("\\d+\\.\\d*", "FLOAT") lexer.AddRule("\\d+", "INT") lexer.AddRule("[\\p{L}\\d_]+", "NAME") lexer.AddRule("\\+", "PLUS") lexer.AddRule("\\-", "MINUS") lexer.AddRule("\\*", "MUL") lexer.AddRule("/", "DIV") lexer.AddRule("=", "ASSIGN") lexer.AddRule("#[^\\r\\n]*", "COMMENT") lexer.AddIgnores("[ \\f\\t]+") lexer.Build(code) for true { token := lexer.NextToken() if (token.TType != BKLexer.TOKEN_TYPE_EOF) { fmt.Printf("%s\t%s\tt%d\t%d\t%d,%d\n", token.Name, strconv.Quote(token.Source), token.TType, token.Position, token.Row, token.Col) } if (token.TType == BKLexer.TOKEN_TYPE_EOF || token.TType == BKLexer.TOKEN_TYPE_ERROR) { break } }}首先引入bklexer在内的包import ( "fmt" "strconv" "./bklexer")fmt 用于打印输出strconv 用于优化字面量的显示./bklexer 引入BKLexer包实例化词法分析器并设定规定lexer := BKLexer.NewLexer()lexer.AddRule("\\d+\\.\\d*", "FLOAT")lexer.AddRule("\\d+", "INT")lexer.AddRule("[\\p{L}\\d_]+", "NAME")lexer.AddRule("\\+", "PLUS")lexer.AddRule("\\-", "MINUS")lexer.AddRule("\\*", "MUL")lexer.AddRule("/", "DIV")lexer.AddRule("=", "ASSIGN")lexer.AddRule("#[^\\r\\n]*", "COMMENT")lexer.AddIgnores("[ \\f\\t]+")NewLexer 实例化词法分析器AddRule 减少匹配规定,参数别离为正则表达式,对应的类型名称AddIgnores 用于设定须要疏忽的字符内容构建并循环匹配lexer.Build(code)for true { token := lexer.NextToken() if (token.TType != BKLexer.TOKEN_TYPE_EOF) { fmt.Printf("%s\t%s\tt%d\t%d\t%d,%d\n", token.Name, strconv.Quote(token.Source), token.TType, token.Position, token.Row, token.Col) } if (token.TType == BKLexer.TOKEN_TYPE_EOF || token.TType == BKLexer.TOKEN_TYPE_ERROR) { break }}应用Build办法,将代码code作为参数进行构建,而后循环调用NextToken办法取得下一个Token,并打印相干信息。须要留神的是该当对Token的类型进行检测判断是否为EOF或ERROR以决定是否终止。 ...

March 24, 2021 · 2 min · jiezi

关于vim:工欲善其事必先利其器系列之四构建基于Vim的补全跳转插件YouCompleteMe的Docker镜像一键部署开发环境

日期作者版本备注2021-03-24dingbinV1.0 C++程序员日常开发中不可避免地遇到变更电脑,变更服务器等事件时重建搭建C++开发环境切实过于沉重,须要消耗很多不必要的宝贵时间。vim 的YouCompleteMe(简称YCM) 插件能够实现较好的C/C++语言主动补全跳转性能,是利用vim进行C /C++代码编辑的必备神器之一。而后理论中YCM的装置及其简单,不仅依赖python动态链接库,还依赖特定高版本的gcc和clang或clangd和cmake等。筹备这些前置组件也很费时费力。有鉴于此,本文介绍一种新的玩法,并给出实际操作细节和间接可用的docker镜像成绩,即:构建基于Vim的C++补全跳转插件YouCompleteMe的Docker镜像,一键实现任意机器上C++开发环境搭建。具体操作办法介绍如下。 环境筹备工夫: 2021-03-24 机器配置:CentOS Linux release 7.5.1804 (Core),8核 12G 创立根底的docker镜像思考装置以后工夫下最新版本的vim和YoucompleteMe插件。参考YouCompleteMe官网介绍的装置办法要求vim/gcc/clang/clangd/cmake/python都在比拟高的版本下能力装置胜利。而咱们为了制作docker 镜像,因而不可能选很旧的根底os。参考YCM官网的倡议,咱们根底OS抉择ubuntu 20.04 LTS。hub.docker.com上间接现成的镜像文件。配置文件须要筹备好如下3个配置文件,本文间接贴出原文内容如下: vim配置文件.vimrc set nocompatible " be iMproved, requiredfiletype off " requiredset encoding=utf-8set rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()Plugin 'VundleVim/Vundle.vim'Plugin 'flazz/vim-colorschemes'Plugin 'godlygeek/csapprox'Plugin 'Valloric/YouCompleteMe'call vundle#end() " requiredfiletype plugin indent on " requiredset cstset csto=1 set nocsverbset csverb"set smd "set showmode"set sc "set showcmdset aw "set autowriteset awa "set autowriteallset title"使关上文件时使光标主动定位到上一次文件被敞开时的精确行if has("autocmd") autocmd BufRead *.txt set tw=78 au BufReadPost * exe "normal! g`\""endif"设置高亮关键字显示syntax enablesyntax on "等同于syn on"禁止在搜寻到文件两端时从新搜寻"set nows "set nowrapscan set ws"设置搜寻式的匹配字符串高亮显示set hls "set hlsearch"设置搜寻式的匹配字符串不高亮显示"set nohls "set nohlsearch "高亮光标所在的以后行set cursorlineset cul "相同的设置是set nocul"set nocul"搜寻时在未齐全输出结束要检索的文本时就开始检索set is "set incsearch"搜寻时在未齐全输出结束要检索的文本时不开始检索"set nois "set noincsearch"设置以backspace删除主动缩进的,行末回车,行首的字符,很有用set backspace=indent,eol,startset ic "相同是 set noic"set scs "相同是 set noscs"加强模式中的命令行主动实现操作,十分有用set wildmenu"设置代码折叠为按语法折叠"set foldmethod=syntax"设定折叠形式为手动set foldmethod=manual"设置启动vim时不要主动折叠代码set foldlevel=100set fdc=1 "set foldcolumn=1 "设置帮忙的语言为中文set helplang=cn"set helplang=en"实现C程序的缩进(indent)set cin "设置行号set nu"set nonu"设置256色调set t_Co=256"设置配色计划"colorscheme 简写成colo"colo colorful "colo white2 colo desert"colo night"colo navajo"colo lucius"colo blackdust"colo freya"colo darkslategray"colo torte"colo fruidle"colo colorful"设置编辑模式下状态栏标尺显示set ru "set ruler"设置编辑模式下状态栏标尺不显示"set noru "set noruler"记录历史的行数set history=1000"检测文件类型"filetype onfiletype plugin on" 开启文件类型检测 的插件和缩进开filetype plugin indent on "设置能够至上一行和下一行的字符按键set ww=b,s,<,>,[,] ",h,l"Alt组合键不映射到菜单上set winaltkeys=no"同时反对GBK和UTF-8编码set fileencodings=utf-8,ucs-bom,gbk,cp936set fileencoding=utf-8set encoding=utf-8"如果在终端环境下应用Vim,须要设置termencoding和终端所应用的编码统一。例如:set termencoding=utf-8 "设置更新ctags文件的快捷键"map <F3> : ! ${HOME}/tools/gen_tags_by_dingbin.bash "%:p:h" z6tags <CR>"map <F4> : ! ${HOME}/tools/gen_tags_by_dingbin.bash "%:p:h" oatags <CR>"map <F5> : ! ${HOME}/tools/gen_tags_by_dingbin.bash "%:p:h" qttags <CR>"===================================================================================================================="map <silent> <F4> : cs show <CR>: let @i = &tags <CR> :let @j = $CSCOPE_TAGS <CR> : !genvimtags -vimCtags <c-r>i -vimCscope <c-r>j <cr> :so ${VIM_SCRIPT_HOME}/configure/vimSourceFile <cr>"map <silent> <F5> : cs show <CR>: let @i = &tags <CR> :let @j = $CSCOPE_TAGS <CR> : !genvimtags -g -vimCtags <c-r>i -vimCscope <c-r>j <cr> :so ${VIM_SCRIPT_HOME}/configure/vimSourceFile <cr> "===================================================================================================================="设置grep插件的快捷键"nnoremap <silent> <F4> :Grep<CR>"-----------------------------------------------------"主动缩进的时候, 缩进尺寸为 4 个空格。"即shiftWidth,主动缩进的空格数,用于<<,>>,cindentset shiftwidth=4 "softtabstop,sts,默认是0,"执行编辑操作,如插入 <Tab> 或者应用 <BS> 时,把 <Tab> 算作空格的数目set softtabstop=4 "set sts=4"编辑时将所有 Tab 替换为空格。"该选项只在编辑时将 Tab 替换为空格, 如果关上一个曾经存在的文件, 并不会将已有的Tab 替换为空格。 "设置了该选项后,如果想输出tab制表符,先输出CTRL-V或CTRL-Q,再输出tab制表符set et "相同的设置是set noet"Tab 宽度为 4 个字符。set ts=4 "即set tabstop=4"Tab操作快捷方式!"nnoremap <C-TAB> :tabnext<CR><CR>:TlistClose<CR><CR>:TlistToggle<CR><CR>"nnoremap <C-S-TAB> :tabprev<CR><CR>:TlistClose<CR><CR>:TlistToggle<CR><CR>"nnoremap <C-TAB> :tabnext<CR><CR>:TlistClose<CR><CR>"nnoremap <C-S-TAB> :tabprev<CR><CR>:TlistClose<CR><CR>""对于tab的快捷键"map tn :tabnext<cr>"map tp :tabprevious<cr>"map td :tabnew .<cr>"map te :tabedit<SPACE>"map tc :tabclose<cr>""map tf :tabnew %:p<cr>:TlistClose<CR><CR>:TlistToggle<CR><CR>"map tf :tabnew %:p<cr>:TlistClose<CR><CR>"覆盖文件时不备份set nobackup "胜利保留文件之前备份 set wb "set writebackup"set nowb "set nowritebackup"插入括号时,短暂地跳转到匹配的对应括号set sm "set showmatch "短暂跳转到匹配括号的工夫set matchtime=2"设置魔术set magic "容许在有未保留的批改时切换缓冲区,此时的批改由 vim 负责保留set hidden "开启新行时应用智能主动缩进set smartindent set autoindent"关上一般文件类型的主动缩进。 该主动缩进不如 cindent 智能, 但它能够为你编辑非 C/C++ 文件提供肯定帮忙。set ai"选中状态下 Ctrl+c 复制"vmap <C-c> "+y"留神应用的过程中能够通过e和b键盘以word为单位后退或后退以抉择文本"set keymodel= "不应用此性能set keymodel=startsel,stopsel "应用此性能"visual 模式下标签查找(*,#)可用vnoremap * y<ESC>/<C-r>"<CR> vnoremap # y<ESC>?<C-r>"<CR> nnoremap g[ :tag <C-R>=expand("<cWORD>")<CR><CR>vnoremap g[ <ESC>:tag <C-r>*<CR>:inoremap ( ()<ESC>i:inoremap [ []<ESC>i:inoremap ;; <ESC>A;<CR>"插入模式下使Ctrl+ h,j,k,l四个键成果等同于挪动上、下、左、右方向键inoremap <C-h> <Left>inoremap <C-j> <Down>inoremap <C-k> <Up>inoremap <C-l> <Right>"插入模式下使ctrl+ w,b两个键成果等同于一般模式下ctrl+w(后退一个单词),ctrl+b("后退一个单词)inoremap <C-b> <C-o>binoremap <C-w> <C-o>w"插入模式下使ctrl+ f(front),Ctrl+e(end)两个键成果等同于一般模式下<home>,<end>键inoremap <C-e> <C-o><End>inoremap <C-f> <C-o><Home>"插入模式下ctrl + d,等效于一般模式下backspace键,"插入模式下ctrl + x,等效于一般模式下delete键,inoremap <C-d> <BS>inoremap <C-x> <Del>"指定在抉择文本时,光标所在位置也属于被选中的范畴set selection=inclusive"-----------------------------------------------------"-----------------------------------------------------"指定不折行。 如果一行太长, 超过屏幕宽度, 则向左边延长到屏幕里面。如果应用图形界面的话, 指定不折行视觉效果会好得多。set nowrap"set wrap"设置显示时一行的文本宽宽set tw=80 "set textwidth=80"增加程度滚动条。 如果你指定了不折行, 那为窗口增加一个程度滚动条就十分有必要了。set guioptions-=b"去除vim的GUI版本的toolbarset guioptions+=T"去除vim的GUI版本的menubarset guioptions+=m"设置断行,当一行的文字太长时,为主动智能在一个单词的两头"空白处断开到下一行显示,留神:这里的断行只用显示,并不在行末加<EOF>set lbr "set linebreak"关上断行模块对亚洲语言反对。 m 示意容许在两个汉字之间断行, 即便汉字之间没有呈现空格。"B 示意将两行合并为一行的时候, 汉字与汉字之间不要补空格。 该命令反对的更多的选项请参看用户手册。set fo+=mB"配置字体"set fileencoding=gbk"set guifont=Courier\ 11 "set guifont=Inconsolata\ Medium\ 9 "史上最难看的vim字体"set guifont=Bitstream_Vera_Sans_Mono:h10:cANSI"set gfw=幼圆:h10.5:cGB2312set guifont=Bitstream\ Vera\ Sans\ Mono\ 13"当右键单击窗口的时候, 弹出快捷菜单set mousemodel=popup"不应用抉择模式set selectmode="设置屏幕滚动的ctrl+d,ctrl+u的行数,默认是窗口的一半,即半屏set scr=4"-----------------------------------------------------"""""""""""""""""""""""""""""""""Taglist plugin settings """"""""""""""""""""""""""""""""let Tlist_Auto_Highlight_Tag = 1"let Tlist_Hightlight_Tag_On_BufEnter = 1"let Tlist_GainFocus_On_ToggleOpen = 0 "if 0 focus at code window, if 1 focus at tag window"""启动vim主动关上taglist"let Tlist_Auto_Open = 0 """ 不同时显示多个文件的 tag ,只显示以后文件的"let Tlist_Show_One_File = 1""" 如果 taglist 窗口是最初一个窗口,则退出 vim"let Tlist_Exit_OnlyWindow = 1"""让以后不被编辑的文件的办法列表主动折叠起来 "let Tlist_File_Fold_Auto_Close = 0"""把taglist窗口放在屏幕的右侧,缺省在左侧 "let Tlist_Use_Right_Window=1 """显示taglist菜单"let Tlist_Show_Menu = 1"""taglist window width"let Tlist_WinWidth = 40""let Tlist_Process_File_Always = 1""" 是否容许关上taglist窗口时主动加宽窗口, 默认为容许."let Tlist_Inc_Winwidth = 1"" 精简模式, 不同的tag类别之间没有空行, 默认为有空行"let Tlist_Compact_Format = 1"" tag是以何种程序排序, 以"order"还是"name", 默认是order, 能够用s切换,"let Tlist_Sort_Type = "order""""用<ALT> + 数字切换Tab窗口""用过Gnome-terminal的人都晓得, 在一个Terminal里关上多个TAB窗口, 用ALT+数字就能够""切换到相应的窗口. 很喜爱这个性能, 映射如下:""noremap <M-1> 1gt"noremap <M-2> 2gt"noremap <M-3> 3gt"noremap <M-4> 4gt"noremap <M-5> 5gt"noremap <M-6> 6gt"noremap <M-7> 7gt"noremap <M-8> 8gt"noremap <M-9> 9gt"noremap <M-0> 10gt"""""""""""""""""""""""""""""""""""Winmanager plugin settings """""""""""""""""""""""""""""""""设置界面宰割"let g:winManagerWindowLayout='FileExplorer|TagList'""let g:winManagerWindowLayout = BufExplorer,FileExplorer|TagList"""let g:winManagerWindowLayout = TagList|FileExplorer,BufExplorer""""设置winmanager的宽度,默认为25""let g:winManagerWidth = 30"""定义关上敞开winmanager按键"nmap wm :WMToggle<cr>""nmap <silent> <F8> :WMToggle<cr>"nmap <silent> <F4> :TlistToggle<cr>"""1)将插件显示在右侧""关上winmanager.vim,在function! <SID>StartWindowsManager()函数中批改:""将:wincmd H 批改为wincmd L:"" for now assume that the explorer windows always stay on the left."" TODO: make this optional later"" make the explorers window always stay on the right ---by chenyong"" wincmd H""wincmd L"""2)进入vim主动关上winmanager""在进入vim时主动关上winmanager"let g:AutoOpenWinManager = 0""相应的在winmanager.vim中批改:""set auto open Winmanager ""if g:AutoOpenWinManager ""autocmd VimEnter * nested call s:StartWindowsManager()|1wincmd w ""endif"""3)退出缓冲区时,主动退出vim""这个性能是参考了taglist的主动退出性能,在taglist.vim中批改的。""函数:function! s:Tlist_Window_Exit_Only_Window()中的winbunr(2)改为winbunr(3),""即只剩2个窗口时敞开,思考到2个窗口必定是同时存在,所以这样还是可行的: ""同时在vimrc中须要设置:""let Tlist_Exit_OnlyWindow=1"""""""""""""""""""""""""""""""""""QuickFix plugin settings """"""""""""""""""""""""""""""""nmap <F7> :cw<cr>:cn<cr>"nmap <F6> :cw<cr>:cp<cr>"nmap <F9> :cclose<cr>""""""""""""""""""""""""""""""""""""""""""""""""""""""""设定是否应用 quickfix 窗口来显示 cscope 后果"""""""""""""""""""""""""""""""""""""""""""""""""""""":set cscopequickfix=s-,g-,c-,d-,i-,t-,e-,f-""""cscope find"的用法:""cs find c|d|e|f|g|i|s|t name""0 或 s 查找本 C 符号(能够跳过正文)""1 或 g 查找本定义""2 或 d 查找本函数调用的函数""3 或 c 查找调用本函数的函数""4 或 t 查找本字符串""6 或 e 查找本 egrep 模式""7 或 f 查找本文件""8 或 i 查找蕴含本文件的文件"nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>"nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>"nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""头文件与源文件互相切换a.vim settings"""""""""""""""""""""""""""""""""""""""""""""""""""""""nnoremap <silent> <F12> :A<CR> ""A 在新Buffer中切换到c\h文件""AS 横向宰割窗口并关上c\h文件""AV 纵向宰割窗口并关上c\h文件""AT 新建一个标签页并关上c\h文件"""""""""""""""""""""""""""""""""""""""""""""""""""""""" F11 : set csto=1, F12 : set csto=0""""""""""""""""""""""""""""""""""""""""""""""""""""""nnoremap <silent> <F11> :set csto=1 <CR> "nnoremap <silent> <F12> :set csto=0 <CR> """" set cs hotkey"nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>"nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>"nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>"nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>""" Using 'CTRL-spacebar' then a search type makes the vim window"" split horizontally, with search result displayed in"" the new window.""nmap <S-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>"nmap <S-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>"nmap <S-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>""" Hitting CTRL-space *twice* before the search type does a vertical"" split instead of a horizontal one""nmap <S-Space><S-Space>s" \:vert scs find s <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space><S-Space>g" \:vert scs find g <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space><S-Space>c" \:vert scs find c <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space><S-Space>t" \:vert scs find t <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space><S-Space>e" \:vert scs find e <C-R>=expand("<cword>")<CR><CR>"nmap <S-Space><S-Space>i" \:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>"nmap <S-Space><S-Space>d" \:vert scs find d <C-R>=expand("<cword>")<CR><CR>function AddFileTitle()call append(0," ")call setline(1,"////////////////////////////////////////////////////////////////////////")call append(1,"/// @Filename " . expand("%:p:t"))call append(2,"/// @Description ")call append(3,"/// @Author DingBin")call append(4,"/// @Last modified " . strftime("%Y-%m-%d %H:%M"))call append(5,"////////////////////////////////////////////////////////////////////////")endfunctionfunction AddFileComment()call append(line(".") -1," ")call setline(line(".") -1,"////////////////////////////////////////////////////////////////////////")call append(line(".") - 1,"/// @brief :")call append(line(".") - 1,"/// @param :")call append(line(".") - 1,"/// @return :")call append(line(".") - 1,"////////////////////////////////////////////////////////////////////////")endfunctionfunction AddoaArrayFor()call append(line(".") -1," ")call setline(line(".") -1,"for (oaUInt4 i = 0; i < .getNumElements(); i++ )")endfunctionmap time :0,50/\/\/\/ *@Last modified/s#@Last modified.*$#\=strftime("@Last modified %Y-%m-%d %H:%M")#cmap addt :call AddFileTitle()<cr>map addc :call AddFileComment()<cr>map addf :call AddoaArrayFor()<cr>"nnoremap <C-1> 1gt "nnoremap <C-2> 2gt "nnoremap <A-3> 3gt"nnoremap <A-4> 4gt "nnoremap <A-5> 5gt "nnoremap <A-6> 6gt "nnoremap <A-7> 7gt "nnoremap <A-8> 8gt "nnoremap <A-9> 9gt "Mode Settingslet &t_SI.="\e[5 q" "SI = INSERT mode"let &t_SR.="\e[4 q" "SR = REPLACE modelet &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)"Cursor settings:" 1 -> blinking block" 2 -> solid block" 3 -> blinking underscore" 4 -> solid underscore" 5 -> blinking vertical bar" 6 -> solid vertical bar"let &t_SI = "\<Esc>]50;CursorShape=1\x7""let &t_SR = "\<Esc>]50;CursorShape=2\x7""let &t_EI = "\<Esc>]50;CursorShape=0\x7""-----------------------------------------------------"对于状态行配置"总是显示状态行set laststatus=2 "set ls=2 "----- 状态栏设置_BEGIN_ -----"显示以后文件名,文件格式,文件类型set statusline=%2*%n%m%r%h%w%*\ %F\ %1*[FORMAT=%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]\ [TYPE=%2*%Y%1*]\ [COL=%2*%03v%1*]\ [ROW=%2*%03l%1*/%3*%L(%p%%)%1*]\ "设置状态栏依据不同状态显示不同色彩function! InsertStatuslineColor(mode) if a:mode == 'i' hi statusline guibg=peru elseif a:mode == 'r' hi statusline guibg=blue else hi statusline guibg=red endifendfunctionau InsertEnter * call InsertStatuslineColor(v:insertmode)au InsertLeave * hi statusline guibg=lightGreen guifg=blackhi statusline guibg=lightGreen"状态行色彩highlight CursorLine cterm=NONE ctermbg=lightGray ctermfg=green highlight StatusLineNC cterm=NONE ctermbg=lightGray ctermfg=green "highlight CursorLine cterm=NONE ctermbg=lightGray ctermfg=green guifg=lightGray guibg=green"highlight StatusLineNC cterm=NONE ctermbg=lightGray ctermfg=green guibg=lightGray guifg=green "highlight CursorLine cterm=NONE ctermbg=lightGray ctermfg=green guifg=red guibg=Green"highlight StatusLineNC cterm=NONE ctermbg=lightGray ctermfg=green guifg=Gray guibg=White"highlight CursorLine cterm=NONE guifg=red guibg=Green"highlight StatusLineNC cterm=NONE guifg=Gray guibg=White"----- 状态栏设置_END_ -----"ycm configurationlet g:ycm_confirm_extra_conf = 0let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'let g:ycm_key_list_select_completion = ['<TAB>','<C-n>','<Down>']let g:ycm_key_list_previous_completion = ['<S-TAB>','<C-p>','<Up>']let g:ycm_complete_in_comments = 1 "在正文输出中也能补全let g:ycm_complete_in_strings = 1 "在字符串输出中也能补全let g:ycm_collect_identifiers_from_comments_and_strings = 0 "正文和字符串中的文字也会被支出补全let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎let g:ycm_min_num_of_chars_for_completion=1 " 从第1个键入字符就开始列举匹配项let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都从新生成匹配项"被动补全"let g:ycm_key_invoke_completion = '<S-Space>'let g:ycm_key_invoke_completion = '<c-k>'let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全"nnoremap <leader>lo :lopen<CR> "open locationlist"nnoremap <leader>lc :lclose<CR> "close locationlist"inoremap <leader><leader> <C-x><C-o>let g:ycm_max_num_identifier_candidates = 50let g:ycm_auto_trigger = 1let g:ycm_error_symbol = '>>'let g:ycm_warning_symbol = '>'"YcmCompleter RefactorRename :重命名"YcmCompleter GoToSymbol nnoremap <leader>jo :YcmCompleter GoTo<CR> "跳转nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> "跳转到定义或申明nnoremap <leader>jf :YcmCompleter GoToDefinition<CR> "跳转到定义nnoremap <leader>jl :YcmCompleter GoToDeclaration<CR> "跳转到申明nnoremap <leader>jt :YcmCompleter GetType<CR> "get类型nnoremap :js :YcmCompleter GoToSymbol nmap <leader>ji :YcmCompleter GoToInclude<CR> "跳转到include、申明或定义nmap <leader>jm :YcmCompleter GoToImprecise<CR> "跳转到实现nmap <leader>jr :YcmCompleter GoToReferences<CR> "跳转到援用nmap <leader>fi :YcmCompleter FixIt<CR> "依据Ycm的倡议修复谬误nnoremap <F6> :YcmForceCompileAndDiagnostics<CR> "从新编译和诊断nmap <F4> :YcmDiags<CR> "F4进行诊断bash 配置文件.bashrc ...

March 24, 2021 · 14 min · jiezi

关于vim:Xcode-配置-Vim

生成自签名证书关上 钥匙串拜访 利用,抉择如下图中 重签名 Xcode敞开 Xcode, 应用上面的命令对 Xcode 进行签名。 sudo codesign -f -s XcodeSigner /Applications/Xcode.app 这个步骤会比拟花工夫,请急躁期待。 要留神的是这里的 XcodeSigner 能够要和上一步生成的证书名字一样。另外,如果你的 Xcode 所在的目录与我不一样,也须要依据理论状况批改装置 XVim2克隆 XVim2 代码 git clone https://github.com/XVimProject/XVim2.git 装置 cd XVim2xcode-select -s /Applications/Xcode.app/Contents/Developermake实现后能够看如下图所示提醒 关上 Xcode, 此时会提醒是否加载 XVim2, 请抉择 Load Bundle 如果手误抉择错了,能够通过上面的形式进行重置,重启 Xcode 能够再呈现刚刚的提醒 defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-X.X 其中的 X.X 写你的 Xcode 版本 XVim2 配置能够在 ~ 目录下创立一个 .xvimrc 文件来寄存 Xcode 中的配置。 参考以下内容:XVim github 地址XVim 官网指引

March 4, 2021 · 1 min · jiezi

关于vim:为了装-X我不做人了

浏览本文大略须要 5 分钟 。 很多接触 Vim 的程序员大略都有这样的经验: 受某些大牛影响看到 Vim 的高逼格。热血沸腾 ,本人看着文档尝试 ,学了几个命令后果决放弃。一段时间后 ,又看到某些大牛在宣扬 Vim 有多好用,多不便。循环\~\~\~循环\~\~\~受不了了, 从新捡起 Vim 学习 ,熟记各种命令。end, 算了 , 我还是滚回去用我的 IDE 吧\~\~\~这就是我的经验呀!!!! 就在方才,我在抉择删除大段文本时,又体验到了 Vim 的便捷好用(间接 :首行,尾行d 解决了!),所以我决定肯定要把刚开始用起来反人类的 Vim 纯熟应用 ,我要用它来装x ,” 我不做人了 “ 。 这个世界上只有三种程序员: 应用Vim的程序员应用EMACS的程序员应用其余编辑器的程序员看到这里 ,肯定会感觉我在吹牛 ,毕竟咱们都曾试过这种三分钟热度 \~\~\~ 别急啊 ,我有具体的施行办法 ,那就是将 IDE 的编辑形式强制规定为 Vim ,这办法真绝 ,堪称是不破不立 。 立贴为证 ,过段时间再来更新首次应用 Vim 的辛酸历程!!

March 3, 2021 · 1 min · jiezi

关于vim:Vim的简单使用

一、Vim 的简略实用记录 vim 的一些简略用法。 二、normal模式下的操作1、疾速回到上次编辑的中央按键盘的 gi 2、在文本间上下左右挪动h:左移j:下移k:上移l:右移3、疾速挪动到下一个单词w/W:疾速挪动到下一个单词结尾。 e/E:疾速挪动到下一给单词结尾。 b/B:回到上一个单词结尾。 上方小写字母和大写字符的区别,大写的示意以空白字符进行宰割,小写示意以非空白字符进行宰割。eg: aa "bb" cc,用小w会跳转到 双引号,在到b,在到c;用大W间接到双引号,而后到c。 4、行间的搜寻命令解释需要示例语句命令后果f{char}挪动到 {char} 这个字符上查问第一个 a(光标在此)bb cc aa dd aafa定位到 c前面的 a 上t{char}挪动到{char}这个字符的前一个字符上定位到a前面的空格bb cc aa(光标在此) dd aata定位到 d 前面的空格上F{char}反过来搜寻,挪动到这个字符{char}上。定位到d前面的a上bb cc aa dd(光标在此) aaFa定位到d前面的a上就像下面的 a可能呈现屡次,如果第一次没有搜寻到,能够应用 ;搜寻该行的下一个,应用,搜寻该行的上一个。 5、行首行尾的挪动命令解释示例语句,语句前后都有空格命令后果0挪动到行首aa bb cc0挪动到了a的最后面^挪动到第一个非空白字符的行首aa bb cc^ == [0w]挪动到了第一个a上$挪动到行尾aa bb cc$挪动到了c前面的空格上g_挪动到第一个非空白字符的行尾aa bb ccg_挪动到了最初的一个c上6、挪动到页面的顶部、尾部、翻页gg:挪动到页面的顶部。 G:挪动到页面的尾部。 ctrl+o: 在上次的地位之间跳转。 ctrl+u:向上翻页。 ctrl+f:向下翻页。 zz:把以后行搁置在屏幕的地方。 7、删除操作1、删除一个或n个字符x:删除一个字符 [数字]x:删除多个字符, eg: 3x 示意删除3个字符。 2、删除一个单词dw/daw:删除以后字符到这个词完结的局部。 diw:删除一个单词 单词光标命令后果解释aa hello word.在 e 处dwaa hword.删除从e开始到w前所有的字符(删除了空格)aa hello word.在 e 处diwaa word.删除从e开始到o完结的所有的字符(没有删除空格)3、删除行dd:删除行 ...

February 20, 2021 · 1 min · jiezi

关于vim:与-Windows-Gvim-第一次握手安装与配置

Winodws Gvim零碎: Windows 10版本: Gvim 8.2 Install Gvim PackageVim的官方网站找到侧边栏的Download点击进去再抉择Windows零碎点击这个下载啦!兴许将来的你,看到这里并不是8.2版本,不过没关系,只有是8.0以上都是能够的,但我还是倡议应用8.2版本,比较稳定Vim8.2直通车点击下载即可 Install Gvim Software装置Gvim很简略,始终下一步就能够了,在装置目录最好不要抉择C:盘 Configure Gvim当初就开始配置Gvim 留神:如果您应用压缩包(.zip)的形式进行下载Gvim请先配置环境变量,应用安装程序(.exe)的不必进入Vim的文件夹(你们本人的)会看到有vim82文件夹和_vimrc文件vim82是存储Gvim的文件夹_vimrc是用来配置Gvim的文件 2.应用记事本关上_vimrc, 把这个文件移进去就好了这样你就会看到一些Vim官网曾经编写好的信息,将全副删除 3.将下方代码复制进去 filetype indent plugin on " 自动识别文件类型" 窗体设置source $VIMRUNTIME/delmenu.vimsource $VIMRUNTIME/menu.vimset cursorline" 窗口大小set lines=35 columns=140" 宰割进去的窗口位于以后窗口下边/左边set splitbelowset splitright"不显示工具/菜单栏set guioptions-=Tset guioptions-=mset guioptions-=Lset guioptions-=rset guioptions-=b" 应用内置 tab 款式而不是 guiset guioptions-=eset nolist" set listchars=tab:?\ ,eol:?,trail:·,extends:>,precedes:<" 设置编码set encoding=utf-8set termencoding=utf-8set fileencoding=utf-8set fileencodings=utf-8,gbk2312,gbk,gb18030,cp936set langmenu=zh_CNlet $LANG = 'en_US.UTF-8'" 关上语法高亮syntax on" 在底部显示,以后处于命令模式还是插入模式set showmode" 命令模式下,在底部显示,以后键入的指令。比方,键入的指令是`2y3d`,那么底部就会显示`2y3`,当键入`d`的时候,操作实现,显示隐没set showcmd" 反对应用鼠标set mouse=a" 启用256色set t_Co=256" 按下回车键后,下一行的缩进会主动跟上一行的缩进保持一致"set autoindent" 因为 Tab 键在不同的编辑器缩进不统一,该设置主动将 Tab 转为空格set expandtab" 显示行号set number" 显示光标所在的以后行的行号,其余行都为绝对于该行的绝对行号set relativenumber" 光标所在的当前列高亮"set cuc" 光标所在的以后行高亮set cul" 主动折行,即太长的行分成几行显示set wrap" 在状态栏显示光标的以后地位(位于哪一行哪一列)set ruler" 光标遇到圆括号、方括号、大括号时,主动高亮对应的另一个圆括号、方括号和大括号set showmatch" 搜寻时,高亮显示匹配后果set hlsearch" 输出搜寻模式时,每输出一个字符,就主动跳到第一个匹配的后果set incsearch" 搜寻时疏忽大小写set ignorecase" Tab键的宽度set tabstop=4" 对立缩进为4set softtabstop=4set shiftwidth=4再关上Gvim就能够看到一个简洁的界面 ...

February 15, 2021 · 1 min · jiezi

关于vim:如何使用vim快速加密和解密文件

每当您在Linux零碎中有一个想要放弃私密的文本文件,无论零碎中领有帐户的其余用户可能具备什么特权,您都能够借助加密来实现。一种简略的办法是应用vim编辑器中内置的性能。您须要提供一个明码,而后记住该明码或将其存储在明码保险箱中,该过程非常简单。文件名无奈更改,复原文件内容的形式与加密形式简直雷同。 首先,假如咱们有一个以这样结尾的文件: $ head -3 mysecretI feel the need to put my deepest darkest secret into a text file on my Linuxsystem. While this likely isn't common practice, I'm not sure that I can trustanyone with it. But a penguin? That's a different story! So here goes ...当初,如果不想让其余用户晓得您的私密信息,能够应用带-x(加密)选项的vim。 $ vim -x mysecretvim编辑器将立刻索要加密密钥。您将输出两次明码。请留神,明码输出时不会显示,而是每个字符将显示为星号。 Enter encryption key: *Enter same key again: *一旦vim关上了文件,它看起来很失常,您能够持续编辑详细信息或增加到您的私密信息中——如果您想这么做,也能够写出加密模式的文件。 想写出加密的内容,只需像平时应用vim那样保留文件即可。 :wq随后试图查看该文件的任何人都可能会看到以下内容: VimCrypt~036▒!y)K▒▒i▒▒▒▒▒{▒z▒▒▒D▒:▒▒7▒▒蝇Xd▒#n▒▒▒q4▒▒▒^9▒|▒▒▒+A▒]j▒▒▒a▒N▒▒▒▒▒▒▒▒}▒▒&f▒▒A3▒Wt[▒T:▒ny▒*▒▒}▒▒▒▒▒"▒▒▒^▒C▒E▒W▒▒v▒pV▒_▒Cj.EA▒▒▒#▒ex▒:▒K▒▒`P▒u▒ ▒▒yhK▒X▒▒(W▒s(RY▒A▒▒▒l9▒▒▒_▒▒▒▒▒I▒▒Lk▒ ▒k▒▒▒▒=▒5G▒▒▒t▒2▒gF▒ 3▒Iq▒C▒▒▒▒OZ[▒l▒_▒~▒▒z一旦您筹备好再次读取文件或持续具体表述私密信息,请再次应用vim命令,并在零碎呈现提醒时输出明码。 $ vim mysecretNeed encryption key for "mysecret"Enter encryption key: *内容会再次以纯文本显示。 I feel the need to put my deepest darkest secret into a text file on my Linuxsystem. While this likely isn't common practice, I'm not sure that I can trustanyone with it. But a penguin? That's a different story! So here goes ...用通常的:wq完结vim会话,文件将放弃加密状态。 如果您筹备在某个时候与别人共享您的私密信息,能够像当初调用它那样解密文件。首先应用vim -X命令。留神这回应用大写的X: $ vim -X mysecretNeed encryption key for "mysecret"Enter encryption key: *随后您会看到原始文本。 I feel the need to put my deepest darkest secret into a text file on my Linuxsystem. While this likely isn't common practice, I'm not sure that I can trustanyone with it. But a penguin? That's a different story! So here goes ...而后输出:X,然而当零碎提醒您再次输出加密密钥(两次)时,只需按回车键: Enter encryption key:Enter same key again:应用:wq再次写出文件。之后,您的文件将复原为未加密模式。 $ head -3 mysecretI feel the need to put my deepest darkest secret into a text file on my Linuxsystem. While this likely isn't common practice, I'm not sure that I can trustanyone with it. But a penguin? That's a different story! So here goes ...更多的抉择 还有许多其余工具可用于加密文件,然而这种办法只须要vim和用于记住密钥的任何办法。要确定某个文件是否被vim加密,能够运行file命令。在上面的示例中,咱们看到该命令告诉您文件何时加密以及何时未加密。 $ file mysecretmysecret: Vim encrypted file data$ file mysecretmysecret: UTF-8 Unicode text原文题目:Using vim to quickly encrypt and decrypt files,作者:Sandra Henry-Stocker

February 2, 2021 · 1 min · jiezi

关于vim:Vim-中用-language-server-对-Raku-perl6-脚本进行实时语法检查

之前整顿了一个 Raku 脚本作为 vim/neovim 中 Raku 的 language server, 它能在文件保留后对 Raku 脚本进行语法查看. 因为之前的 language server 脚本中应用了 raku -c foobar.raku 语句对脚本进行语法查看. 上述语法查看须要文件数据, 所以必须将编辑器缓冲区的内容写入文件中, 而后能力进行语法查看. 基于上述办法, 如果须要实时进行语法查看的话, 可能的形式是建设一个临时文件, 在产生内容扭转事件时缓冲区内容写入临时文件. 之后能力运行 raku -c temporary_file.raku 来对语法进行查看. 建设临时文件的办法也是目前 Atom raku 插件 和 VS Code raku 插件所应用的策略. 在看 Raku 语法解析库 Raku-Parser 代码的时候, 发现原来 NQP 提供了解析 Raku 脚本并进行语法查看的性能. 通过NQP提供的性能, 就能够解脱临时文件利用language server 对在 vim/neovim 中编辑的 Raku 脚本做实时的语法查看了. 在文章的最初, 我整顿了一个新的脚本, 并且有相干的配置阐明. 如果只想晓得如何配置的话能够间接跳到最初. NQP Raku 语法分析NQP 中 Raku 语法分析的性能非常容易就能够在 Raku 脚本中被调用. 上面是一个例子: ...

January 31, 2021 · 7 min · jiezi

关于vim:Vim使用全指南-环境配置插件推荐美化-CPythonMarkDownR

提醒1:本文次要解说了Windows下Vim的应用,配置,丑化与应用Vim写C++,Python,MarkDown,R。其余语言的插件很不分明 提醒2:Vim是一款工具,应用Vim是为了放慢您的Coding效率的,不要配置比应用的工夫还长(尽管很好玩) 提醒3:我想把这篇文章写的尽量的长,目标是帮忙更多同学绕过Vim配置中的诸多天坑,请急躁观看,毕竟这要比你用一个星期去配置Vim来的快很多 提醒4:Manjarol来的先读16节 目录0.为什么要写这篇文章1.Vim的简介2.Vim的起源2.1 Ken Thompson 写了一个行编辑器(Line Editor)2.2 Bill Joy 写了一个文本编辑器2.3 Bram Moolenaar 编写了 Vim3.Vim的下载与装置(退出Vim到环境变量)4. 意识与关上Vim5. Vim根本的应用阐明5.1 用Vim关上文件5.2 Vim的四种模式5.2.1Normal Mode5.2.2 Last line mode模式5.2.3 Insert模式5.2.4 Visual模式5.3 宏录制6. Vim的配置文件根本应用办法6.1 第一个Vim配置,行号6.2 设置快捷键映射6.3 装置插件管理器6.4 尝试装置第一个插件6.5 尝试卸载第一个插件7. 基于问题解决的配置介绍7.1 对于gVim7.2 为关上_vimrc配置快捷键7.3 为Vim配置默认编码7.4 为Vim配置代码高亮7.5 将gVim的语言批改为英文方便使用[7.6[间接写上]向下兼容vi](https://blog.csdn.net/Liukair...7.7 在可视化下兼容鼠标7.8 将缩进设置为空格7.9 缩进配置为4空格7.10 在空行末显示$7.11 渲染Tab和空格7.12 尽可能在滚动的时候留下几行7.13 开启退格跨行退格7.14 开启代码折叠[7.15 在三种模式下采纳三种光标[仅gVim]](https://blog.csdn.net/Liukair...7.16 永远保留命令行7.17 在从新关上文件后保留光标地位7.19 主动缩进[7.20 设置字体[仅gVim]](https://blog.csdn.net/Liukair...7.21 暗藏gVim的四个滚动条7.21 设置绝对行号7.22 突出显示选中的字符所在行列7.23 主动换行7.24 显示输出的命令(右下角)7.25 输出命令的时候Tab显示提醒7.26 智能查找 高亮显示后果7.27 复制粘贴到剪贴板7.28 快捷保留 刷新7.29 设置分屏7.30 减少删除tabe标签7.31 插入模式挪动光标8. 编译程序9. 在插件介绍之前的筹备10. 通用插件的介绍10.1 输入法切换: xkb-switch10.2 Vim外部的todolist: undotree10.3 Vim外部的文件树:NERDTreeToggle10.4 Vim弱小状态栏:Airline10.5 多语言代码查错:ALE10.6 代码主动正文:nerdcommenter10.7 代码彩虹括号10.8 自定义开始菜单10.9 全语言代码主动补全10.10 Vim主动括号补全10.11 Vim函数整顿10.12 gVim界面通明11. 特定语言的插件介绍11.1 C/C++的插件11.1.1 主动格式化代码11.1.2 代码高亮11.1.3 代码查看ALE11.2Python的插件11.2.1 语言反对11.2.2 代码查看ALE11.3 LaTeX的插件11.4 MarkDown的插件11.4.1 MarkDown预览11.4.2 MarkDown主动输出表格11.5 R语言插件12. 解决ESC13. Vim 键位图14. 优良的参考与学习资源15. 我的Vim配置16 Vim 在Linux下的配置*0.为什么要写这篇文章因为依赖win下的很多软件,不不便间接切换到Linux,然而对于Win下的vim应用阐明与参考太少了,本人摸索了一段时间,斗胆分享一下,还请老哥们指教以下是我目前的工作环境 ...

December 28, 2020 · 23 min · jiezi

关于vim:5分钟学会-Vim-分屏操作方方面面

Vim分屏性能是通过宰割窗口来实现的,这是进步工作效率的一大利器。无论咱们想同时显示两个文件,或者同时显示一个文件的两个不同的地位,又或者并排比拟两个文件,等等,这些都能通过分屏来实现,这样子很不便代码的比对和复制粘贴 程度方向分屏关上新文件 :sp linuxmi.py或者:split linuxmi.py这个命令把窗口横向切分为两个窗口,并把光标置于下面的窗口中。垂直方向分屏关上新文件 :vsp linux.py:vsplit linux.py:sview linux.py ->只读分屏关上文件另外,要关上窗口编辑一个新的文件时,能够用以下命令::new 从命令行间接关上多个文件且是分屏 vim -On file1, file2 … ->垂直分屏vim -on file1, file2 … ->程度分屏linuxmi@linuxmi:~/www.linuxmi.com$ vim -O3 linux.py linuxmi.py linuxmi.cpp注:-O垂直分屏,-o程度分屏,n示意分几个屏 实时调整以后窗口的宽度 ctrl-w > //向右加宽,默认值为1ctrl-w N > //向右加宽宽度Nctrl-w < // 同理 横屏/竖屏分屏关上以后文件 ctrl+w sctrl+w v 切换分屏 ctrl+w h,j,k,lctrl+w 上下左右键crtl+w进行分屏窗口的切换 按完当前再按一个wcrtl+w进行分屏窗口的切换 按完当前再按一个r 调换窗口crtl+w进行分屏窗口的切换 按完当前再按一个c 敞开窗口 敞开分屏 敞开窗口有以下几个个命令:ctrl+W c 敞开以后窗口ctrl+w q 敞开以后窗口,若只有一个分屏且退出vim:only 仅保留以后分屏:hide 敞开以后分屏 调整分屏的大小(宽度与高度) ctrl+w = 所有分屏都对立高度ctrl+w + 减少高度,默认值为1ctrl+w - 缩小高度10 ctrl+w + 减少10行高度ctrl-w N + //以后屏高度加N应用指定以后屏的调整高度: res[ize] N示例::resize 30 ...

December 18, 2020 · 1 min · jiezi

关于vim:小知识Linux系统ssh连接的超时时间设置

判断是否是否设置了超时工夫命令行: echo $TMOUT 例如:[iyunv@xxx ~]# echo $TMOUT 100 输入100,则超时工夫为100秒。 如果输入空或0示意不超时,大于0的数字n示意n秒内通道未应用则超时。批改超时工夫参数1、关上配置文件:vi /etc/profile2、找到export TMOUT=xxxx这一行,批改工夫值xxxx为你须要的工夫,比方export TMOUT=6003、是配置失效:source /etc/profile

December 9, 2020 · 1 min · jiezi

关于vim:打造一款高逼格的-Vim-神器

Vim 是一个上古神器,本篇文章次要继续总结应用 Vim 的过程中不得不理解的一些指令和注意事项,以及继续分享一个前端工作者不得不装置的一些插件,而对于 Vim 的简介,主题的抉择,以及为何应用 vim-plug 来治理插件等内容,有趣味的同学下来能够本人理解和比照下。 装置sudo apt-getinstall vim// Ubuntu其余平台,能够自行谷歌。 老手指南vimtutor// vim 教程下面是史上最简略,最全面的Vim基础教程,至今无人超过。 上面是作者基于下面的演绎: 挪动光标# hjkl# 2w 向前挪动两个单词# 3e 向前挪动到第 3 个单词的开端# 0 挪动到行首# $ 以后行的开端# gg 文件第一行# G 文件最初一行# 行号+G 指定行# <ctrl>+o 跳转回之前的地位# <ctrl>+i 返回跳转之前的地位退出# <esc> 进入失常模式# :q! 不保留退出# :wq 保留后退出删除# x 删除以后字符# dw 删除至以后单词开端# de 删除至以后单词开端,包含以后字符# d$ 删除至以后行尾# dd 删除整行# 2dd 删除两行批改# i 插入文本# A 以后行开端增加# r 替换以后字符# o 关上新的一行并进入插入模式撤销# u 撤销# <ctrl>+r 勾销撤销复制粘贴剪切# v 进入可视模式# y 复制# p 粘贴# yy 复制以后行# dd 剪切以后行状态#<ctrl>+g 显示以后行以及文件信息查找# / 正向查找(n:持续查找,N:相同方向持续查找)# ? 逆向查找# % 查找配对的 {,[,(# :set ic 疏忽大小写# :set noic 勾销疏忽大小写# :set hls 匹配项高亮显示# :set is 显示局部匹配替换# :s/old/new 替换该行第一个匹配串# :s/old/new/g 替换全行的匹配串# :%s/old/new/g 替换整个文件的匹配串折叠# zc 折叠# zC 折叠所有嵌套# zo 开展折叠# zO 开展所有折叠嵌套执行外部命令# :!shell 执行外部命令.vimrc.vimrc 是 Vim 的配置文件,须要咱们本人创立: cd Home               // 进入 Home 目录touch .vimrc          // 配置文件# Unix# vim-plug# Vimcurl -fLo ~/.vim/autoload/plug.vim --create-dirs     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim# Neovimcurl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim其余平台,能够查看 vim-plug[1]。 根本配置勾销备份set nobackupset noswapfile文件编码setencoding=utf-8显示行号setnumber勾销换行setnowrap显示光标以后地位setruler设置缩进set cindentset tabstop=2set shiftwidth=2突出显示以后行setcursorline查找set icset hlsset is左下角显示以后vim模式setshowmode代码折叠#启动 vim 时敞开折叠代码set nofoldenable主题syntax enableset background=darkcolorscheme solarized◈ altercation/vim-colors-solarized[2]◈ Anthony25/gnome-terminal-colors-solarized[3] 插件配置树形目录Plug 'scrooloose/nerdtree'Plug 'jistr/vim-nerdtree-tabs'Plug 'Xuyuanp/nerdtree-git-plugin'autocmd vimenter * NERDTreemap <C-n> :NERDTreeToggle<CR>let NERDTreeShowHidden=1let g:NERDTreeShowIgnoredStatus = 1let g:nerdtree_tabs_open_on_console_startup=1let g:NERDTreeIndicatorMapCustom = {     "Modified"  : "✹",     "Staged"    : "✚",     "Untracked" : "✭",     "Renamed"   : "➜",     "Unmerged"  : "═",     "Deleted"   : "✖",     "Dirty"     : "✗",     "Clean"     : "✔︎",     'Ignored'   : '☒',     "Unknown"   : "?"     }# o 关上敞开文件或目录# e 以文件治理的形式关上选中的目录# t 在标签页中关上# T 在标签页中关上,但光标依然留在 NERDTree# r 刷新光标所在的目录# R 刷新以后根门路# X 收起所有目录# p 小写,跳转到光标所在的上一级门路# P 大写,跳转到以后根门路# J 到第一个节点# K 到最初一个节点# I 显示暗藏文件# m 显示文件操作菜单# C 将根门路设置为光标所在的目录# u 设置下级目录为根门路# ctrl + w + w 光标主动在左右侧窗口切换# ctrl + w + r 挪动以后窗口的布局地位# :tabc 敞开以后的 tab# :tabo   敞开所有其余的 tab# :tabp   前一个 tab# :tabn   后一个 tab# gT      前一个 tab# gt      后一个 tab◈ scrooloose/nerdtree[4]◈ vim-nerdtree-tabs[5]◈ nerdtree-git-plugin[6] 代码,引号,门路补全Plug 'Valloric/YouCompleteMe'Plug 'Raimondi/delimitMate'Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }◈ Valloric/YouCompleteMe[7]◈ Raimondi/delimitMate[8]◈ Shougo/deoplete.nvim[9] 语法高亮,查看Plug 'sheerun/vim-polyglot'Plug 'w0rp/ale'let g:ale_linters = {    'javascript': ['eslint'],    'css': ['stylelint'],}let g:ale_fixers = {    'javascript': ['eslint'],    'css': ['stylelint'],}let g:ale_fix_on_save = 1let g:ale_sign_column_always = 1let g:ale_sign_error = '●'let g:ale_sign_warning = '▶'nmap <silent> <C-k> <Plug>(ale_previous_wrap)nmap <silent> <C-j> <Plug>(ale_next_wrap)◈ w0rp/ale[10]◈ sheerun/vim-polyglot[11] 文件,代码搜寻Plug 'rking/ag.vim'Plug 'kien/ctrlp.vim'◈ kien/ctrlp.vim[12]◈ ggreer/the_silver_searcher[13]◈ rking/ag.vim[14] 加强版状态栏Plug 'vim-airline/vim-airline'Plug 'vim-airline/vim-airline-themes'let g:airline_theme='papercolor'◈ vim-airline/vim-airline[15]◈ vim-airline/vim-airline-themes[16] 代码正文Plug 'scrooloose/nerdcommenter'# <leader>cc // 正文# <leader>cm 只用一组符号正文# <leader>cA 在行尾增加正文# <leader>c$ /* 正文 */# <leader>cs /* 块正文 */# <leader>cy 正文并复制# <leader>c<space> 正文/勾销正文# <leader>ca 切换 // 和 /* */# <leader>cu 勾销正文let g:NERDSpaceDelims = 1let g:NERDDefaultAlign = 'left'let g:NERDCustomDelimiters = {             'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },             'less': { 'left': '/**', 'right': '*/' }         }◈ scrooloose/nerdcommenter[17] gitPlug 'airblade/vim-gitgutter'Plug 'tpope/vim-fugitive'◈ airblade/vim-gitgutter[18]◈ tpope/vim-fugitive[19] MarkdownPlug 'suan/vim-instant-markdown'let g:instant_markdown_slow = 1let g:instant_markdown_autostart = 0# :InstantMarkdownPreview◈ suan/vim-instant-markdown[20] EmmetPlug 'mattn/emmet-vim'let g:user_emmet_leader_key='<Tab>'let g:user_emmet_settings = {          'javascript.jsx' : {             'extends' : 'jsx',          },       }◈ mattn/emmet-vim[21] html 5Plug'othree/html5.vim'◈ othree/html5.vim[22] css 3Plug 'hail2u/vim-css3-syntax'Plug 'ap/vim-css-color'augroup VimCSS3Syntax  autocmd!  autocmd FileType css setlocal iskeyword+=-augroup END◈ hail2u/vim-css3-syntax[23]◈ ap/vim-css-color[24] JavaSciptPlug 'pangloss/vim-javascript'let g:javascript_plugin_jsdoc = 1let g:javascript_plugin_ngdoc = 1let g:javascript_plugin_flow = 1set foldmethod=syntaxlet g:javascript_conceal_function             = "ƒ"let g:javascript_conceal_null                 = "ø"let g:javascript_conceal_this                 = "@"let g:javascript_conceal_return               = "⇚"let g:javascript_conceal_undefined            = "¿"let g:javascript_conceal_NaN                  = "ℕ"let g:javascript_conceal_prototype            = "¶"let g:javascript_conceal_static               = "•"let g:javascript_conceal_super                = ""let g:javascript_conceal_arrow_function       = "⇒"let g:javascript_conceal_noarg_arrow_function = " "let g:javascript_conceal_underscore_arrow_function = " "set conceallevel=1◈ pangloss/vim-javascript[25](注:上述脚本中存在特殊字符,有的状况下显示不正确,请间接用上述链接的内容。) ReactPlug 'mxw/vim-jsx'let g:jsx_ext_required = 0◈ mxw/vim-jsx[26] ...

October 22, 2020 · 1 min · jiezi

关于vim:vim编辑器-底色阴影解除

明天在应用vim编辑器时,没有留神到点到了什么,导致在文件中bind单词底部都有黄色的暗影; 能够在vim编辑器中底层模式中输出:nohlsearch 胜利解决了我的问题; 查到有人说:如果心愿当前都不在呈现这个状况,能够用set nohlsearch 把它放在vimrc里,能够永恒失效。

September 9, 2020 · 1 min · jiezi

关于vim:建议收藏史上最全的-vim-快捷键文档

版本一 版本二 版本三 版本四 版本五

August 25, 2020 · 1 min · jiezi

vim代码折叠之html文件

最近编辑html,发现有须要折叠代码,查了一下,做个笔记。 set foldmethod=manual在某个标签处,zfat或zfit 能够创立一个折叠,而后用za就能够关上或者敞开一个折叠,I have found zfat (or, equally, zfit) works well for folding with HTML documents. za will toggle (open or close) an existing fold. zR opens all the folds in the current document, zM effectively re-enables all existing folds marked in the document.

July 15, 2020 · 1 min · jiezi

Vim-操作实用案例分析一批量在行首或行尾添加内容

我们写代码或者文档时,经常需要在多行的行首或者行尾添加同样的内容,手动一行行操作显然效率很低,做这样的事情有方便的技巧。 案例一把 aaabbbcccdddeee改成 # aaa# bbb# ccc# # ddd# eee注释掉一段代码是非常常用的操作,很多人都知道如何操作,直接替换即可: :%s/^/# # 后有一个空格。^ 只匹配行首的位置,而不匹配任何字符,所以可以直接替换,$ 也同理。 另外也可以用列选择模式(<C-v>,也可以用 <C-q>,因为 <C-v> 通常用于粘贴,可以在 Vim 或者终端中把 <C-v> 映射为粘贴功能,这样和其他软件一致会方便不少),选定这些行,然后 I# <Esc> 但这样想跳过空行就不大方便了,所以不展开了。 案例二很多人不喜欢在空行的行首添加注释(尤其不想在行尾添加一个空格),所以需要把 aaabbbcccdddeee改成 # aaa# bbb# ccc# ddd# eee先全部替换再删除效率肯定低下,可以这样: :%s/./# &重点是对 & 的使用,它代表前边匹配到的内容(也就是非空行的第一个字符)。 案例三实际场景我们很少整体注释掉一个文件,一般都是注释其中的某一段,比如把 aaabbbcccdddeeefffggghhhiii改成 aaabbbccc# ddd# eee# fff# ggghhhiii这次操作是从第 5 行开始,下次操作可能就从 193 行开始了,用 5G 定位后再操作肯定不通用也不方便,用搜索定位通常会方便很多: :/ddd/,/ggg/s/./# &:/ddd/,/ggg/ 就是让后边的操作只作用于 ddd 和 ggg 之间。 有时我们只需要用搜索定位到起始行,然后注释掉后边确定的几行(在这里注释当前行和后边的 4 行),可以这样: :/ddd/,+4s/./# &+4 的意思是把之后的 4 行也放到作用范围内。如果直接用行号,改成行号就行,比如 5,+4 、5,9。如果想先选定再操作,定位到起始行,然后 V,再定位到结束行,再输入 :s/./# & 就可以,都是常规操作,不赘述。 ...

June 29, 2020 · 1 min · jiezi