Vim笔记

Posted by wsxq2 on 2018-06-01
TAGS:  noteVimTODO

:help ins-completion :helpsupertab ==退出类:wqq! 删除类:xdddwded$d2w2dd;p 操作类:hjkl;0ew$2w2e2$;iIaAoO 撤销类:uU(ctrl-r) 更改类:r,R,ce,c$,cw,c[number]motion;:s/old/new(/g):#,#s/old/new/g:%s/old/new/g:/%s/old/new/gc 定位类:(ctrl-g)+num+GGgg(ctrl-i)(ctrl-o) 搜索类:/+字符串nN;?+字符串nN;回到之前的位置:ctrl-o跳转到新的位置:ctrl-i;% 执行外部命令::!ls 保存文件:wfilename;v+motion:wfilename;:rfilename:r!ls 复制文件:y+p;yw 设置:setxxx:icishlsnoic :help:helpcmd;ctrl-w;vimrc; :ctrl-d

==vim:进入插入模式:a,A,i,I,o,O 光标操作:h,j,k,l,gg,G,nG,^,$,fx,Fx,W,nw,b,nb 编辑文档:x,dd,ndd,d$,J,u,rx,yy,p,P,r!ls 查找与替换:/hostn,N?hostn,N:s/root/admin/:s/root/admin/g:3,5s/sbin/bin/g:%s/nologin/fault/g 保存与退出::q!:wq:x:w:wb.txtZZ 技巧::setnu:setignorecase:splitctrl+w+h左,ctrl+w+l右,ctrl+w+j上,ctrl+w+k下:close:splitsecond.txt:vsplit!lsctrl+n自动补齐

:help:helpcmd;ctrl-w;vimrc; :ctrl-d :echo&fileencoding :setfencs/fenc/enc :setfileformat设置文件格式 :setendofline设置文件结束符 :setnoendofline取消文件结束符 :setlist进入ListMode :setnolist退出ListMode :settextwidth设置行宽 :setwrapmargin=10设置行边距 :join合并多行 J合并两行 :%s/\n//g :%s/\r//g删除DOS文件中的回车符“^M” :setfileformat? :setfileformat=unix :%s/+/\r/g把一个很长的一行按空格分为多行 :g/^s*$/d删除文章空行 :%s=*$==删除行尾空格 :%s/^M//g(^M=Ctrlv+Ctrlm)快速去掉^M :%s/\r//g快速去掉^M :%s/\r/\r/g转换DOS回车符“^M”为真正的换行符 :%s/^\n\{3}// :%s/\n\n/\r/g vifile1file2file3 /\<the\> :n切换到下一个文件(n=next) :N切换到上一个文件 :sp另外一个文件的路径及文件名 vi-ofile1file2file3....用分割屏幕窗口方式同时打开多个文件 可以使用ctrl+两次按w或者ctrl+w然后按上下键在上下窗口间切换。sp=split,vsp=vsplit :ls展示全部的打开文档 :xn切换到向下的第x个文档 nctrl+6:切换到第n个buffer ctrl+6或:e#回到前一个编辑文件 :newxxx ctrl+ws对当前文档内容分屏显示 ctrl+wq关闭所处分屏 ctrl+wo仅显示当前分屏内容 ctrl+wjk上下选择分屏 :n1,n2con3:将n1行到n2行之间的内容拷贝到第n3行下 :n1,n2mn3:将n1行到n2行之间的内容移至到第n3行下 :n1,n2d:将n1行到n2行之间的内容删除 :%s/^.*$\n\(^.*$\)/\1/g :%s/\(^.*$\)\n\(^.*$\)/\1\2/g :%s/\(\\\w\+\\$\)/E:\1/ :/tcp/g/d :%g/tcp.*\n.*/j :122,125g/^/j :%s/\(^$\n\)// :setformatoptions=tcqmM :settextwidth=80 gggqG :1center :edit++encoding=unicode :%!xxd :%!xxd -r vim-ba.ko :%s/extern//gn ~ 3gUU guw 2^g

选择不匹配的行并删除 v/pattern/d g!/pattern/d

输入UTF-8特殊字符: 打开Vim,按i, 按 Ctrl+v,按 u, 按2234

065, u00bf, :h i_CTRL-V_digit {char1}{char2}, ?I, :h digraphs-default, :digraphs, :h digraph-table Ctrl+],Ctrl+O Ctrl+D,helpgrep 注释::16,24s#^#//#g:27,30s#^//##g:27,30s#^//##g:10,20s/^/#/g 按Control+v(win下面ctrl+q)进入列模式,按“I”进入插入模式,输入注释符“#”或者是"//",然后立刻按下ESC(两下) Ctrl+v进入块选择模式,选中你要删除的行首的注释符号,注意//要选中两个,选好之后按d即可删除注释 统计:gctrl-g;ggvGgctrl-g;:s/[\u4E00-\u9FA5]//n function!ChineseCount()range letsave=@z silentexec'normal!gv"zy' lettext=@z let@z=save silentexec'normal!gv' letcc=0 forcharinsplit(text,'\zs') ifchar2nr(char)>=0x2000 letcc+=1 endif endfor echo"CountofChinesecharastersis:" echocc endfunc vnoremap:callChineseCount() 作者:韦易笑 链接:https://www.zhihu.com/question/54118781/answer/137982087 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 常用配置文件: autocmdFileTypec,cpp settabstop=4 setshiftwidth=4 setsofttabstop=4 setsmarttab setexpandtab setnu setnobackup setcursorline setruler setautoindent syntaxon vim:复制复制字符到vim的命令行窗口的4种方法 1.从vim中拷贝字符串到:命令行: 先yank字符串 然后在:命令行ctrl-r" 2.从其它窗体中拷贝字符串到:命令行: 先拷贝字符串到系统剪贴板 然后在:命令行ctrl-r+或者ctrl-r* 3.利用在:命令行补齐: 先把光标定位到关键词 然后切换到:命令行按 4.鼠标中键 拷贝字符串到:命令行,主要是用于执行替换操作(查找有#和*) 编码问题: A,"设置文件的代码形式 setencoding=utf-8"enc settermencoding=utf-8"tenc setfileencoding=utf-8"fenc setfileencodings=ucs-bom,utf-8,chinese,cp936"fencs B,"vim的菜单乱码解决: "同样在_vimrc文件里以上的中文设置后加上下列命令, source$VIMRUNTIME/delmenu.vim source$VIMRUNTIME/menu.vim C,"vim提示信息乱码的解决 languagemessageszh_CN.utf-8 不同的国家和地区制定了不同的标准,由此产生了GB2312、GBK、GB18030、Big5、Shift_JIS等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码。在简体中文Windows操作系统中,ANSI编码代表GBK编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI编码代表Shift_JIS编码 其中fenc是当前文件的编码,也就是说,一个在vim里面已经正确显示了的文件(前提是你的系统环境跟你的enc设置匹配),你可以通过改变fenc后再w来将此文件存成不同的编码。比如说,我:setfenc=utf-8然后:w就把文件存成utf-8的了,:setfenc=gb18030再:w就把文件存成gb18030的了。这个值对于打开文件的时候是否能够正确地解码没有任何关系。 fencs就是用来在打开文件的时候进行解码的猜测列表。文件编码没有百分百正确的判断方法,所以vim只能猜测文件编码。比如我的vimrc里面这个的设置是 setfileencodings=utf-8,gb18030,utf-16,big5 所以我的vim每打开一个文件,先尝试用utf-8进行解码,如果用utf-8解码到了一半出错(所谓出错的意思是某个地方无法用utf-8正确地解码),那么就从头来用gb18030重新尝试解码,如果gb18030又出错(注意gb18030并不是像utf-8似的规则编码,所以所谓的出错只是说某个编码没有对应的有意义的字,比如0),就尝试用utf-16,仍然出错就尝试用big5。这一趟下来,如果中间的某次解码从头到尾都没有出错,那么vim就认为这个文件是这个编码的,不会再进行后面的尝试了。这个时候,fenc的值就会被设为vim最后采用的编码值,可以用:setfenc?来查看具体是什么。 当然这个也是有可能出错的,比如你的文件是gb18030编码的,但是实际上只有一两个字符是中文,那么有可能他们正好也能被utf-8解码,那么这个文件就会被误认为是utf-8的导致错误解码。 至于enc,其作用基本只是显示。不管最后的文件是什么编码的,vim都会将其转换为当前系统编码来进行处理,这样才能在当前系统里面正确地显示出来,因此enc就是干这个的。在windows下面,enc默认是cp936,这也就是中文windows的默认编码,所以enc是不需要改的。在linux下,随着你的系统locale可能设为zh_CN.gb18030或者zh_CN.utf-8,你的enc要对应的设为gb18030或者utf-8(或者gbk之类的)。 最后再来说一下新建空文件的默认编码。看文档好像说会采用fencs里面的第一个编码作为新建文件的默认编码。但是这里有一个问题,就是fencs的顺序跟解码成功率有很大关系,根据我的经验utf-8在前比gb18030在前成功率要高一些,那么如果我新建文件默认想让它是gb18030编码怎么办?一个方法是每次新建文件后都:setfenc=gb18030一下,不过我发现在vimrc里面设置fenc=gb18030也能达到这个效果。 encoding:Vim内部使用的字符编码方式,包括Vim的buffer(缓冲区)、菜单文本、消息文本等。 fileencoding:Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式(不管是否新文件都如此)。 fileencodings:Vim启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将fileencoding设置为最终探测到的字符编码方式。因此最好将Unicode编码方式放到这个列表的最前面,将拉丁语系编码方式latin1放到最后面。 termencoding:Vim所工作的终端(或者Windows的Console窗口)的字符编码方式。这个选项在Windows下对我们常用的GUI模式的gVim无效,而对Console模式的Vim而言就是Windows控制台的代码页,并且通常我们不需要改变它。 系统剪贴板: "+y复制到系统剪贴板 "+p粘贴 "+gp粘贴并且移动光标到粘贴内容后 配置: autocmdFileTypec,cppsettabstop=4 setshiftwidth=4 setsofttabstop=4 setsmarttab setexpandtab setnu if&term=="xterm" sett_Co=8 sett_Sb=^[[4%dm sett_Sf=^[[3%dm endif 1、配置文件的位置 在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件。 如果不知道配置文件及脚本的位置,可以在vim中使用命令:scriptnames,将显示如下路径 /etc/vimrc /usr/share/vim/vim72/syntax/syntax.vim /usr/share/vim/vim72/syntax/synload.vim /usr/share/vim/vim72/syntax/syncolor.vim /usr/share/vim/vim72/filetype.vim /usr/share/vim/vim72/ftplugin.vim /home/kdj/.vimrc ... 如果不知道vim配置文件的搜索位置,请输入:version,将显示 系统vimrc文件:"/etc/vimrc" 用户vimrc文件:"$HOME/.vimrc" 用户exrc文件:"$HOME/.exrc" $VIM预设值:"/usr/share/vim" 我只是将/etc/vimrc文件拷贝到所要设置的用户下,然后使用mv命令,将拷贝的后vimrc命名为.vimrc然后添加下面相关的设置 2、设置语法高亮显示 1)打开vimrc,添加以下语句来使得语法高亮显示: syntaxon 2)如果此时语法还是没有高亮显示,那么在/etc目录下的profile文件中添加以下语句: exportTERM=xterm-color 3、设置Windows风格的C/C++自动缩进(添加以下set语句到vimrc中) 1)设置(软)制表符宽度为4: settabstop=4 setsofttabstop=4 2)设置缩进的空格数为4 setshiftwidth=4 3)设置自动缩进:即每行的缩进值与上一行相等;使用noautoindent取消设置: setautoindent 4)设置使用C/C++语言的自动缩进方式: setcindent 5)设置C/C++语言的具体缩进方式(以我的windows风格为例): setcinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 6)如果想在左侧显示文本的行号,可以用以下语句: setnu setroler设置光标显示 7)最后,如果没有下列语句,就加上吧: if&term=="xterm" sett_Co=8 sett_Sb=^[[4%dm sett_Sf=^[[3%dm endif