多语言展示
当前在线:1789今日阅读:84今日分享:32

Linux Shell编程之Vim编辑器

vim是linux下面强大的编辑器。vim有3种模式,普通模式,插入模式和命令模式。一开始为普通模式。按”:”冒号进入命令模式,按o,i,a进入插入模式。下面就以写个test.c描述vim的使用。vim的配置vim强大之处在于它有很多很好用的插件。作为程序人员,首先要安装ctags。再安装vim的插件,taglist和winmanager。还有其他很多插件,不过我一般就只用这两个。下面是我的vimrc'Allsystem-widedefaultsaresetin$VIMRUNTIME/debian.vim(usuallyjust'/usr/share/vim/vimcurrent/debian.vim)andsourcedbythecallto:runtime'youcanfindbelow.Ifyouwishtochangeanyofthosesettings,youshould'doitinthisfile(/etc/vim/vimrc),sincedebian.vimwillbeoverwritten'everytimeanupgradeofthevimpackagesisperformed.Itisrecommendedto'makechangesaftersourcingdebian.vimsinceitaltersthevalueofthe''compatible'option.'Thislineshouldnotberemovedasitensuresthatvariousoptionsare'properlysettoworkwiththeVim-relatedpackagesavailableinDebian.runtime!debian.vimsetfileencodings=utf-8,gb2312,gbk,gb18130,cp936'UncommentthenextlinetomakeVimmoreVi-compatible'NOTE:debian.vimsets'nocompatible'.Setting'compatible'changesnumerous'options,soanyotheroptionsshouldbesetAFTERsetting'compatible'.setnocompatible'Vim5andlaterversionssupportsyntaxhighlighting.Uncommentingthe'followingenablessyntaxhighlightingbydefault.ifhas('syntax')syntaxonendif'Ifusingadarkbackgroundwithintheeditingareaandsyntaxhighlighting'turnonthisoptionaswell'setbackground=dark'UncommentthefollowingtohaveVimjumptothelastpositionwhen'reopeningafileifhas('autocmd')auBufReadPost*ifline(''\'')>1&&line(''\'')<=line('$')|exe'normal!g'\''|endifendif'UncommentthefollowingtohaveVimloadindentationrulesandplugins'accordingtothedetectedfiletype.ifhas('autocmd')filetypepluginindentonendif'Thefollowingarecommentedoutastheycausevimtobehavealot'differentlyfromregularVi.Theyarehighlyrecommendedthough.setshowcmd'Show(partial)commandinstatusline.setshowmatch'Showmatchingbrackets.setignorecase'Docaseinsensitivematchingsetsmartcase'Dosmartcasematchingsetincsearch'Incrementalsearchsetautowrite'Automaticallysavebeforecommandslike:nextand:make'sethidden'Hidebufferswhentheyareabandonedsetmouse=a'Enablemouseusage(allmodes)'Sourceaglobalconfigurationfileifavailableiffilereadable('/etc/vim/vimrc.local')source/etc/vim/vimrc.localendifsetnusetfoldmethod=syntaxsetfoldlevel=100setautoindentsetsmartindentsettabstop=4setshiftwidth=4'TListletTlist_Show_One_File=1letTlist_Exit_OnlyWindow=1nmaptl:Tlist'Tlist'winmanngerletg:winManagerWindowLayout='FileExplorer|TagList''winmanagerTagListnmapwm:WMToggle'winmanager 注意的几点:1)filecoding,编码方式,里面设置可以支持中文,不然中文乱码2)setnocompatiable:不兼容老版本,不然键盘输入出问题(方向键变成了abcd)3)setmouse=a:这句话让鼠标全局使能,可以使用鼠标4)setnu:显示行号5)setfoldmethod:设置折叠方式,普通模式下zc折叠代码,zo打开代码,在看大的代码块非常有用6)setautoindent:自动缩进7)tabstop=4:制表位宽度为48)tl映射命令Tlist,需要安装taglist插件9)wm映射命令WMToggle,需安装winmanager。vim编辑lvim+filename就打开或者新建了一个文件然后按键盘i,进入插入模式,输入代码。输入代码是可以使用ctrl+n/ctrl+p进行自动补全(这个补全功能很弱,只是在本文件内部进行查找匹配)。然后wq保存。这里介绍下vim文本编辑的常用命令:a):nu,命令模式下输入行号可以直接跳到改行b)num+yy:普通模式当前光标所在向下复制num行,不加num表示复制本行,yw表示复制一个wordc)num+dd:删除当前光标向下num行,如果不加num表示删除本行,dw表示删除一个work,dG表示删除到末尾,d$删除到行尾。d)u:撤销修改e)p:粘贴最近复制的或者删除的内容f)q:q在普通模式下表示记录操作。qa:表示记录操作到寄存器a,记录完成以q结束。然后按句点“。”重复寄存器里面的动作,也可以times@a将寄存器里的动作重复times次。g)大面积注释:光标移到要注释的行首,CONTROL+V进入visual模式,下移光标到注释块最后一行行首,shift+i,输入//注释符号,按两次esc就可以看到这块代码被注释了。反注释时同样操作,将//删除就可以了。h)格式化代码:vim提供num+=来格式化num行。或者使用visual模式选定需要格式化的区域,然后按=i)查找字符:普通模式下“/“查找字符,”:%s“替换字符,如:%s/\/10/g 上命令表示将ten替换为10,:%s为替换开头。\<匹配字符串的左边界,\>匹配字符串的右边界,g表示全局范围。这样就完成了一个文件的编辑。写个makefile编译这个文件。打开vim,在里面输入:make(vim支持make命令),如果编译出错,可以输入:cope,快速定位到错误所在按CONTROL+WW可以把光标在不同的窗口之间移动,编辑不同的窗口,输入ls可以看到当前vim有哪些缓冲器,即同时编辑的文件,输入buffer+缓冲区号可以将对应缓冲区切到前台编辑。vim看代码vim看大的项目工程我用的还不是很习惯,提供一些常用命令1)ctags–R*生成tags文件。这个命令需要在shell命令行下面敲,,在vim里面使用:!执行shell命令2)tags+=tagpath,把一个tagpath的tags文件导入到当前的vim使用环境中。如tags+=./tags,表示把当前目录下的tags文件导入到vim中。3)tagtagname:打开tagname所在的文件,如果该tagname在多处出现,可以使用:ts,该命令列出每个tagname的具体位置,你可以选择正确的tag打开。4)gf:打开头文件。将光标移到头文件名上,按gf就可以打开该头文件,前提是该头文件在vim的path变量指定的路径内,如果没有,可以用setpath+=来增加搜索路径。5)gd在函数内所需光标下的单词第一次出现的位置,gD在文件范围内寻找光标下的单词第一次出现的位置,通常可以用来搜索的局部变量和全局变量6)#往回找光标当前的单词,*往后找光标当前的单词,配合hlsearch,可以很容一的找到函数中某个变量使用的地方,如果要清楚hlsearch,使用:sethlsearch。%可以在大括号之间跳转。7)CONTROL+]跳到变量/函数的定义,CONTROL+T调回上一步(和CONTROL+])对应。gctrl+]可以弹出选择列表8)CONTROL+i跳到前一步,CONTROL+o跳到后一步。
推荐信息