免费手机网站建站平台,怎么做校园表白网站,怎样给一个公司做网站,北京工程造价信息网官网vim使用命令
【自动补全操作】
Ctrl n / Ctrl p 自动补全字符串Ctrl x Ctrl f 自动补全文件名
【多文件操作】 打开多个文件#xff1a;
vim file1 file2 … filen 在同一个窗口中打开所有想要打开的文件vim -o file1 file2 … filen 打开一个编辑会话#xff0c;水平分…vim使用命令
【自动补全操作】
Ctrl n / Ctrl p 自动补全字符串Ctrl x Ctrl f 自动补全文件名
【多文件操作】 打开多个文件
vim file1 file2 … filen 在同一个窗口中打开所有想要打开的文件vim -o file1 file2 … filen 打开一个编辑会话水平分割窗口一个文件占用一个窗口vim -O file1 file2 … filen 打开一个编辑会话垂直分割窗口一个文件占用一个窗口vim -o5 file1 file2 将水平分配5个相同的窗口有3个是闲置的
文件切换
e file 在当前窗口载入显示file文件ls 显示打开的所有文件列表,带编号:b1~n 切换至第n个文件:bn 下一个文件:bp 上一个文件Ctrl6 两文件间的切换
【多窗口操作】 切割窗口操作:
:sp(lit) 水平切割窗口:vsp(list) 垂直切割窗口:qa(ll) 关闭所有窗口
默认新建立的窗口显示相同的文件,可以通过以下命令显示不同的文件: [n] split(vsplit) [opt] [cmd] [file]
多窗口切换
按住Ctrl W然后再加上h, j, k, l分别表示向左、下、上、右移动窗口也可以使用上、下、左、右键 Ctrl w h向左移动窗口 Ctrl w j 向下移动窗口 Ctrl w j 向上移动窗口 Ctrl w l 向右移动窗口 Ctrl w w这个命令会在所有窗口中循环移动 Ctrl w t移动到最左上角的窗口 Ctrl w b移动到最右下角的窗口 Ctrl w p移动到前一个访问的窗口
【调整窗口大小】
改变当前窗口的尺寸同时当然也会影响到其他窗口。 在gvim和vim中可以用鼠标点击窗口的顶部白色条并窗口直接调整尺寸。
也可以直接用命令调整尺寸命令也是以Ctrl W开头 Ctrl W 让所有窗口调整至相同尺寸平均划分 Ctrl W -将当前窗口的高度减少一行也可在ex命令中resize -4明确指定减少的尺寸 Ctrl W 将当前窗口的高度增加一行。同样在ex命令中resize n 明确指定增加尺寸 Ctrl W 将当前窗口的宽度减少 Ctrl W 将当前窗口的宽度增加 Ctrl W |将当前窗口的宽度调到最大也可他哦你通过ex命令vertical resize n明确指定改变宽度
【vimdiff】
vimdiff或者vim -d进入diff模式在文件的各个差异点之间前后移动 ], c跳转到下个差异点[, c跳转到上个差异点 内容合并 使用 d, p 即 diff put命令将当前差异点中的内容覆盖到另一文件中的对应位置使用 d, o 即 diff obtain命令可以将另一窗口中差异点处的内容拉取到当前位置并进行替换操作
使用技巧
【新建文件自动添加头部】
autocmd BufNewFile *.sh,*.py,*.c,*.h,*.cpp exec :call SetFileHeaderComment()func s:SetCommentLine(pre, comment)normal ocall setline(line(.), a:pre.a:comment)
endfuncfunc s:SetCommonComment(pre)call s:SetCommentLine(a:pre, )call s:SetCommentLine(a:pre, FileName: .expand(%))call s:SetCommentLine(a:pre, )call s:SetCommentLine(a:pre, Author: )call s:SetCommentLine(a:pre, Description: ---)call s:SetCommentLine(a:pre, Created Time: .strftime(%c))call s:SetCommentLine(a:pre, Last Modified: .strftime(%Y-%m-%d %H:%M:%S))call s:SetCommentLine(a:pre, )
endfuncfunc SetFileHeaderComment()if expand(%:e) shcall setline(line(.), \#/bin/bash)call s:SetCommonComment(\#)elseif expand(%:e) pycall setline(line(.), \#!/usr/bin/env python)call s:SetCommentLine(\#, -*- coding: utf-8 -*-)call s:SetCommonComment(\#)elseif expand(%:e) c || expand(%:e) cppcall setline(line(.), /*)call s:SetCommonComment( *)call s:SetCommentLine( *, /)elseif expand(%:e) hlet h_macro __.toupper(expand(%:r))._H_INCLUDEDcall setline(line(.), #ifndef .h_macro)call s:SetCommentLine(, #define .h_macro)call s:SetCommentLine(, #endif /* .h_macro. */)call cursor(2, len(getline(2)))normal onormal Onormal Oendifnormal o
endfunc【多行多列操作】
按v进入visual状态选择多行用或缩进或缩出
vim列块操作
通常根据语言特征使用自动缩进排版在命令状态下对当前行用 连按两次, 或对多行用nn是自然数表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n排版相当于一般IDE里的code format。使用ggG可对整篇代码进行排版。
:20,30 s/^/#/g 第20到30行用 # 注释掉。 :20,30 s/^#//g 取消注释
:4,10 s/[I ]// 去掉行首的空白字符
:co 12 把当前行 copy 到行 12 的地方。 可以看到 vim 命令针对当前行在前面加个范围就可以针对多行。 用 . 表示当前行, % 表示全文, $ 表示末尾
:.,30 s/^/#/g
vim配置文件使用
vim --version查看vim支持的功能以及配置文件目录
set nocompatible 关闭 vi 兼容模式colorscheme morning 设定配色方案/usr/share/vim/vim74/colors
set number 显示行号
set cursorline 突出显示当前行
set ruler 打开状态栏标尺
set shiftwidth4 设定 和 命令移动时的宽度为 4
set softtabstop4 使得按退格键时可以一次删掉 4 个空格
set tabstop4 设定 tab 长度为 4
set expandtab 将tab键替换成空格:set ts4:set noexpandtab:%retab!显示行尾的空格
highlight WhitespaceEOL ctermbgred guibgred
match WhitespaceEOL /\s\$/:set list 显示制表符,显示方式如下设置set listcharstab:-,trail:-set listcharstab:\|\ ,trail:.,extends:,precedes:,eol:$set nobackup 覆盖文件时不备份
set autochdir 自动切换当前目录为当前文件所在的目录
syntax on 自动语法高亮
filetype plugin indent on 开启插件
set backupcopyyes 设置备份时的行为为覆盖set ignorecase smartcase 搜索时忽略大小写但在有一个或以上大写字母时仍保持对大小写敏感
set nowrapscan 禁止在搜索到文件两端时重新搜索
set incsearch 输入搜索内容时就显示搜索结果
set hlsearch 搜索时高亮显示被找到的文本
set noerrorbells 关闭错误信息响铃
set novisualbell 关闭使用可视响铃代替呼叫
set t_vb 置空错误铃声的终端代码set showmatch 插入括号时短暂地跳转到匹配的对应括号set matchtime2 短暂跳转到匹配括号的时间
set magic 设置魔术
set hidden 允许在有未保存的修改时切换缓冲区此时的修改由 vim 负责保存
set guioptions-T 隐藏工具栏
set guioptions-m 隐藏菜单栏
set smartindent 开启新行时使用智能自动缩进
set backspaceindent,eol,start 不设定在插入状态无法用退格键和Delete 键删除回车符
set cmdheight1 设定命令行的行数为 1
set laststatus2 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline\ %%F[%1*%M%*%n%R%H]%\ %y\ %0(%{fileformat}\ %{encoding}\%c:%l/%L%)\ 设置在状态行显示的信息set nofoldenable 开始折叠
set foldmethodsyntax 设置语法折叠
set foldcolumn0 设置折叠区域的宽度
setlocal foldlevel1 设置折叠层数为set foldcloseall 设置为自动关闭折叠 nnoremap space ((foldclosed(line(.)) 0) ? zc : zo)CR用空格键来开关折叠vim插件的使用
ctags
【安装】
安装: yum install -y ctags
【生成tags文件】
ctags -R 递归的为当前目录及子目录下的所有代码文件生成tags文件ctags *.c *.h 为某些源码生成tags文件
为了使得字段补全有效在生成tags时需要一些额外的参数推荐的c参数主要是 ctags -R --c-kindspx --fieldsiaS --extraq 其中 选项c±kinds 用于指定C语言的 tags记录类型, --c-kinds用于指定c语言的 通用格式是 --{language}-kinds 选项 fileds 用于指定每条标记的扩展字段域 extra 选项用于增加额外的条目: f表示为每个文件增加一个条目 q为每个类增加一个条目
【使用方法】
在vim打开源码时指定tags文件才可正常使用通常手动指定在vim命令行输入 :set tags./tags (当前路径下的tags文件) 若要引用多个不同目录的tags文件可以用逗号隔开
或者设置 ~/.vimrc加入一行则不用手动设置tags路径 set tags~/path/tags
若要加入系统函数或全局变量的tag标签则需执行 ctags -I __THROW --file-scopeyes --langmapc:.h --languagesc,c --linksyes --c-kindspx --fieldsS -f ~/.vim/systags -R /usr/include /usr/local/include * 并且在~/.vimrc中添加亦可用上面描述的手动加入的方式 set tags~/.vim/systags 这样便可以享受系统库函数名补全、原型预览等功能了。
如果经常在不同工程里查阅代码那么可以在~/.vimrc中添加 set tagstags; set autochdir
设置好了tags文件在定位变量/函数的定义时最常用的快捷键是 Ctrl ] 跳转到变量或函数的定义处或者用命令 :ta name 而使用快捷组合键 Ctrl o/t 返回到跳转前的位置。
另外ctags不会生成局部变量的索引不过可以使用gd组合键对光标所在处的word进行快捷查找定位来定位也是相当快捷的。
$ vim -t myAdd 用vim打开文件时添加参数-t funcName会自动打开定义该函数的文件并定位到定义首行上面这句就是找到myAdd定义的文件打开并将光标置于定义的第一行处。
:tags 会列出查找/跳转过程(经过的标签列表)
另外附上vim环境中其他较为好用的快捷键
定位至当前光光标所指单词的下一次出现的地方 # 定位至当前光光标所指单词的上一次出现的地方 n 定位至跳至已被标记出的单词下一次出现的地方 shiftn 定位至跳至已被标记出的单词上一次出现的地方
关于更详细的ctags用法vim中使用 :help tags
【问题】快捷键Ctrl ]的跳转功能不生效 排查步骤如下
: echo tagfiles() 查看tags这个变量的设置是否正确: pwd 查看vim的工作路径:verbose map C-] 查看快捷键的映射是否被其他插件配置给覆盖
taglist
【功能】 a source code browser(supports C/C, Java, perl, Python, tcl, sql, php, etc): 提供了源码的结构化浏览功能可将源码中定义的类、函数、变量等以树结构显示层次关系可一目了然而且于快速定位并查看。
【下载安装】 taglist插件是以vim脚本的形式存在因此只需要将其下载下来放到相应的目录即可。taglist基于ctags才能发挥作用因此在使用taglist之前确保已经安装了ctags。
下载地址(两个可选择任意一个) Official site http://vim-taglist.sourceforge.net/ VIM online http://www.vim.org/scripts/script.php?script_id273
将文件放到**/usr/share/vim/vim74**对应的文件夹下即可
在vim配置文件中配置taglist选项:
如果ctags不在Path路径下,则配置ctags的路径
if MySys() windowslet Tlist_Ctags_Cmd ctags
elseif MySys() linuxlet Tlist_Ctags_Cmd /usr/bin/ctags
endiflet Tlist_Show_One_File 1 不同时显示多个文件的tag只显示当前文件的
let Tlist_Exit_OnlyWindow 1 如果taglist窗口是最后一个窗口则退出vim
let Tlist_Use_Right_Window 1 在右侧窗口中显示taglist窗口
let Tlist_Sort_Type name taglist以tag名字进行排序缺省是按tag在文件中出现的顺序进行排序
let Tlist_Use_SingleClick 1 设置单击tag就跳转到定义处,确实双击
let Tlist_Auto_Open1 启动vim自动打开taglist窗口
let Tlist_Close_On_Select1 在选择了tag后自动关闭taglist窗口
let Tlist_File_Fold_Auto_Close1 当同时显示多个文件中的tag时,可使taglist只显示当前文件tag其它文件的tag都被折叠起来。
let Tlist_GainFocus_On_ToggleOpen1在使用:TlistToggle打开taglist窗口时,输入焦点在taglist窗口中
let Tlist_Process_File_Always1 taglist始终解析文件中的tag不管taglist窗口有没有打开
let Tlist_Use_Horiz_Window 1 设置taglist窗口横向显示Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度在taglist窗口中可以使用的快捷键:
快捷键功能说明CR跳到光标下tag所定义的位置用鼠标双击此tag功能也一样o在一个新打开的窗口中显示光标下tagSpace显示光标下tag的原型定义u更新taglist窗口中的tags更改排序方式在按名字排序和按出现顺序排序间切换xtaglist窗口放大和缩小方便查看较长的tag打开一个折叠同zo-将tag折叠起来同zc*打开所有的折叠同zR将所有tag折叠起来同zM[[跳到前一个文件]]跳到后一个文件q关闭taglist窗口F1显示帮助
cscope
安装: yum install -y cscope
配置文件语法介绍
快捷键映射
【vim模式】 Vim的模式众多但是一般被提及的也就是这么几种: Normal Mode 也就是最一般的普通模式默认进入vim之后处于这种模式。 Visual Mode 一般译作可视模式在这种模式下选定一些字符、行、多列。 在普通模式下可以按v进入。 Insert Mode 插入模式其实就是指处在编辑输入的状态。普通模式下可以按i进入。 Select Mode 在gvim下常用的模式可以叫作选择模式吧。用鼠标拖选区域的时候就进入了选择模式。 和可视模式不同的是在这个模式下选择完了高亮区域后敲任何按键就直接输入并替换选择的文本了。 和windows下的编辑器选定编辑的效果一致。普通模式下可以按gh进入。 Command-Line/Ex Mode 就叫命令行模式和Ex模式吧。两者略有不同普通模式下按冒号(:)进入Command-Line模式可以输入各种命令 使用vim的各种强大功能。普通模式下按Q进入Ex模式其实就是多行的Command-Line模式。
【Map基本概念】
命令的组合 同Vim下的其他命令一样命令的名字往往由好几段组成。前缀作为命令本身的修饰符微调命令的效果。 对于map而言可能有这么几种前缀
nore 表示非递归见下面的介绍n 表示在普通模式下生效v 表示在可视模式下生效i 表示在插入模式下生效c 表示在命令行模式下生效
【快捷键映射实例】
右括号自动补全:
inoremap ( ()ESCiinoremap [ []ESCiinoremap { {}ESCiCRESCS-oinoremap ESCiinoremap ESCiinoremap ESCi
参考
Vim 的补全模式加速器轻松玩转全部 15 种自动补全模式 技巧Vimdiff 使用http://cscope.sourceforge.net/http://ctags.sourceforge.net/vim插件ctags的安装和使用vim插件taglist的安装和使用强大的vim配置文件让编程更随意