Vim常用指令
Vim常用指令
前言:
这篇博文整理记录常用的Vim指令,方便查询。
设置tab为4个空格
:set tabstop=4
设置换行自动缩进为4个空格
:set shiftwidth=4
设置显示行号
:set number
撤销指令(undo)
普通模式下按u
以root权限运行gvim(否则无文件写入权限)
保存文件
:w
:w!
退出gvim
:q
:q!
插入模式
光标字符前进入插入模式:i
光标字符后进入插入模式:a
光标所在行行首进入插入模式:
I
光标所在行行末进入插入模式:A
光标下插入新行进入插入模式
o
光标上插入新行进入插入模式O
运行dos指令
:!cmd
:! dir /w
切换目录
:cd E:\
打开文件
:edit .\DebugLog.h
不错在则新建隐藏或显示菜单栏
:set guioptions-=m
(m小写)
:set guioptions+=m
隐藏或显示工具栏
:set guioptions-=T
(T大写)
:set guioptions+=T
左右缩进
【shift】 <</<<
多行缩进:
在可是模式下选中多行【shift】 >/<
分屏打开文件(文件不存在则新建)
水平分屏:split .\Debug.c
垂直分屏:vsplit .\Debug.c
Undo和Redo
Undo:普通模式下按u
Redo:普通模式下按【ctr】 + r
分屏切换
循环切换ctr w + w
按方向切换窗口ctr w + k/j/h/l
分屏窗口移动
按方向移动窗口(移动到最边上)ctr w + K/J/H/L
(编程大写)文件浏览器
Explore
窗口浏览器中打开选中的文件(当前路径):
按回车则打开选中文件(不分屏打开文件,如果是目录则进入该目录)
按o
则水平分屏打开选中文件
按v
则垂直分屏打开选中文件可是模式下复制选中的文本
y
删除游标所在位置的一个单词
daw
(会放入缓存)复制游标坐在位置的一个单词
yaw
复制游标所在整行(结尾带换行符)
yy
分屏窗口修改高度和宽度
修改高度:
游标所在需要移动的窗口内输入指令ctr w + -/+
注意是+号不是=,需要按住shift打出+号。
修改宽度:
游标所在需要移动的窗口内输入指令ctr w + </>
屏幕行与实际行的游标移动
实际行移动:k/j/h/l
对应上下左右屏幕行移动:
g + k/j
对应上下移动行;g + 0/$
对应移至屏幕行行首和尾。屏幕滚动一行
往下:ctr + e
往上:ctr + y
跳转到指定行
普通模式下行数 + G
命令模式下:行数
快速跳转到文件首尾巴
跳转到文件首:gg
跳转到文件尾:G
显示行末换行符
显示:set list
不显示:set nolist
替换游标处的一个字符,并且仍然处于普通模式
r
删除游标处一个字符,并且删除后在该位置进入编辑模式
s
当前文件搜索游标处字符串
shift + *
复制从游标开始往下的n行到缓冲区
nyy
yny
删除n行
dnd
游标移动到行首(普通模式)
移动到下一行行首:+
移动到上一行行首:-
从当前游标位置开始复制到行首或行末
复制至行首(不含游标所在处字符):y0
复制至行末(含游标所在处字符): ·y$`从当前游标位置开始删除到行首或行末
删除至行首(不含游标所在处字符):d0
删除至行末(含游标所在处字符): ·d$`游标移动到行末(首)(普通模式)
行末$
行首0
跳到下(上)一个字符串的首(尾)部
下一个字符串首:w
上一个字符串首:b
下一个字符串尾:e
上一个字符串尾:ge
文件内字符串全替换
把字符串abc全部替换为123:%s/abc/123/g
选中多行的列
ctr + v
分屏高度调为最大
ctr w + _
分屏宽调为最大
ctr w + |
当前文件内搜索字符串
命令模式下输入/string
即可语法高亮string字符串,高亮后普通模式下n
跳到下一个搜索结果,N
跳到上一个。选中游标位置至词末
普通模式下v + e
改变光标处字母的大小写
~
光标跳转到上一次跳转的位置
按两次`代码折叠
在可是模式下选中代码块输入zf
即可折叠代码,输入空格即可展开折叠。头文件与源文件之间切换(需要安装插件a.vim,官网下载后直接拷贝到插件目录plugin文件夹中,注:vim需要重启一下插件才能生效。下载地址:https://www.vim.org/scripts/script.php?script_id=31)
:A 在新Buffer中切换到c/h文件
:AS 横向分割窗口并打开c/h文件
:AV 纵向分割窗口并打开c/h文件
:AT 新建一个标签页并打开c/h文件标签页操作
在新标签呀打开编辑一个文件:tabedit filename
跳转到下一个标签页gt
跳转到上一个标签页gT
在定义和声明处跳转(需要安装插件ctags.exe,官网下载后解压,解压可看到一堆文件而我们只需要把ctags.exe拷贝到gvim的安装根目录下即可,若要拷贝到其他路径则需要让gvim能找到它而修改vimrc文件或者添加路径到环境变量里。注:插件需要重启gvim才能生效。下载地址:https://sourceforge.net/projects/ctags/files/ctags/5.8/ctags58.zip/download)
- 在使用跳转命令前请将gvim给cd到你的工程目录(最好是根目录)然后执行一次命令
:!ctags -R
就会在路径下生成文件tags,该文件记录了相关的关键词跳转信息。注:修改了代码后需要再次执行该命令来更新ctags文件,也即更新跳转的信息。 - 有了ctags后跳转命令为
ctr + ]
- 在使用跳转命令前请将gvim给cd到你的工程目录(最好是根目录)然后执行一次命令
使用TagList浏览代码(需要安装插件taglist.vim,官网下载后解压,里面有帮助文档taglist.txt和taglist.vim脚本文件,将其放到gvim相应路径(doc、plugin)下即可使用,注:插件需要重启gvim才能生效。下载地址:https://www.vim.org/scripts/script.php?script_id=273)
注意:使用此插件之间需要先安装ctags
注意:taglist.txt直接拷贝到doc路径下,在vim中执行指令:help taglist.txt
并不会打开帮助文档,需要先把它加入到doc下的tags文件里,也即生成帮助标签,执行指令如helptags C:\cpy\Softs\Install\gvim81\Vim\vim81\doc
,后面是doc的路径。打开taglist视图
:TlistOpen
在_vimrc文件中添加指令
let Tlist_Show_One_File = 1
则可使taglist中一次只显示一个文件的信息。折叠taglist中一项
-
。
展开taglist中一项+
。
折叠taglist中全部项=
。
展开taglist中全部项*
。快速打开编辑_vimrc文件。
输入指令:edit $vim/_vimrc
语法补全
gvim81似乎已经自带相关插件了,可以直接使用ctr + x, ctr + n
自动补全功能。
为了方便和美观我们在_vimrc文件中添加如下设置。imap <TAB> <C-X><C-N> highlight Pmenu guibg=darkgrey guifg=black highlight PmenuSel guibg=lightgrey guifg=black
如此就能改变框的颜色和将自动补全快捷键设置为tab键了。
向后切换成员:
Ctrl+N
向前切换成员:Ctrl+P
分隔当前窗口
水平分割:split
垂直分割:vsplit
当前分屏和下一个分屏交换位置
ctr + w x
关闭当前文件并打开上次打开的文件(多次按可继续打开之前打开过的文件)
ctr + o
当前文件跳转到光标所在字符串的定义处,并高亮文件内该字符串。
gd
打开上次关闭gim时的文件。这个功能需要安装一个插件mru.vim,下载好后直接拷贝到pulugin目录下即可(下载地址: https://www.vim.org/scripts/script.php?script_id=521)
MRU
输入该指令会将上次关闭vim时还处于打开的文件列表显示。打开vim保持上次关闭的设置(保持窗口视图、全局设置、文件打开状态,也即窗口布局和上次关闭时一致)
输入指令: mks! Session.vim会自动在当前目录下创建一个文件Session.vim,该文件记录窗口的布局,下次打开vim只需加载该文件就能还原。 打开指令,在windows下输入cmd指令
gvim -S Session.vim`
注意Tlist和Explore窗口并不会记录打开,要想启动vim自动打开需要在_vimrc文件中添加指令修改分屏宽度
vertical res 30
推出vim软件
exit
vim显示目录树(实现该功能需要安装插件NERD_tree.vim,该插件可以将文件夹里的文件折叠或展开显示,而vim自带的文件浏览器
Explore
一次只能浏览一个文件夹下的文件,下载地址为:https://www.vim.org/scripts/script.php?script_id=1658)
解压压缩包,解压出的文件将其拷贝到vim安装路径下的对应目录中即可,注插件要重启vim才能生效)
重启vim时会报错,错误如下:
“处理 C:\cpy\Softs\Install\gvim81\Vim\vim81\plugin\NE
RD_tree.vim 时发生错误:
第 68 行:
E117: Unknown function: nerdtree#runningWindows
E116: Invalid arguments for function22_initVari
able
第 69 行:
E114: 缺少引号: “鈻?)
E116: Invalid arguments for function22_initVari
able
第 70 行:
E114: 缺少引号: “鈻?)
E116: Invalid arguments for function22_initVari
able
第 96 行:
E117: Unknown function: nerdtree#runningWindows
E15: 无效的表达式: nerdtree#runningWindows()
第 141 行:
E117: Unknown function: nerdtree#loadClassFiles
第 145 行:
E117: Unknown function: nerdtree#ui_glue#setupCom
mands
第 151 行:
E121: 未定义的变量: g:NERDTreeCreator
E15: 无效的表达式: “autocmd BufLeave “. g:NERDTreeCr
eator.BufNamePrefix() .”* if g:NERDTree.IsOpen() | call
b:NERDTree.ui.saveScreenState() | endif”
第 154 行:
E121: 未定义的变量: g:NERDTreeCreator
E15: 无效的表达式: “autocmd BufEnter “. g:NERDTreeCr
eator.BufNamePrefix() .”* stopinsert”
第 205 行:
E117: Unknown function: nerdtree#postSourceActions
”
这是由于文件内有一些无法识别的符号,可以尝试使vim支持显示这些字符或者将这些字符修改为vim能支持的。使其支持这些符号的办法是在_vimrc中添加如下代码:
set encoding=utf-8 set termencoding=utf-8 set fileencoding=chinese set fileencodings=ucs-bom,utf-8,chinese set langmenu=zh_CN.utf-8 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim language messages zh_cn.utf-8
如果折叠或展开的三角形字符显示出错,应该是当前使用的字体不出吃显示该字符,可以修改字体如:
set guifont=Consolas:h10
其他一些设置可以如下:
"Show line number. let g:NERDTreeShowlineNumber=1 "Show hide file. let g:NERDTreeHidden=0 "Show Node model. let NERDTreeDirArrows=1
注意帮助文档NERD_tree.txt拷贝到doc目录下,在vim中运行指令
help NERD_tree.txt
并不能打开它,需要输入指令更行tags文件,指令为:helptags C:\cpy\Softs\Install\gvim81\Vim\vim81\doc
设置vim窗口大小
set lines=30
set columns=120
安装配置好的vim可以将整个路径连同相关配置文件拷贝到其他电脑使用,免安装。
使用winmanager插件将NERDTree和TagList合并显示(需要安装插件winmanager.vim,下载地址为:https://www.vim.org/scripts/script.php?script_id=95,将安装包加压后文件丢到vim相应路径下即可,插件需要重启vim才会生效)。
一下是我的winmanager配置:let g:NERDTree_title='[NERDTree]' let g:winManagerWindowLayout="NERDTree|TagList" let g:winManagerWidth=30 let g:AutoOpenWinManager=1 nmap <silent> <F2> :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif <CR><CR> function! NERDTree_Start() exec 'NERDTree' endfunction function! NERDTree_IsValid() return 1 endfunction
用winmanager打开NERDTree会自动打开一个空白的窗口,为了将其关闭所以在快捷键处设置。
禁止vim生成备份文件
set noundofile
set nobackup
set noswapfile
安装YouCompleteMe
安装YCM前首先安装git和Vundle。
github在国内重官网下载非常慢,可以选择从代理服务器下载:http://npm.taobao.org/mirrors/git-for-windows/
在vim的安装路径下执行cmd命令:
git clone https://github.com/VundleVim/Vundle.vim.git vimfiles/bundle/Vundle.vim
即可完成Vundle下载在_vimrc文件开头插入如下配置:
set nocompatible " be iMproved, required filetype off " required set rtp+=$VIM/vimfiles/bundle/Vundle.vim/ call vundle#begin('$VIM/vimfiles/bundle/') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required
vim中输入指令
VundleInstall
安装插件。然后安装好python、LLVM和cmake并添加好环境变量。
LLVM的安装(有两种形式,一种是下载源码后自己编译,但这种办法可能存在编译报错而且编译很慢。另一种办法是下载官方编译好后的二进制文件):
下载源码自己编译:
先下载源码(不推荐此法):
http://releases.llvm.org/download.html
LLVM source code
Clang source code
compiler-rt source code将llvm-6.0.0.src.tar.xz解压,将cfe-6.0.0.src.tar.xz解压,文件夹重命名为clang,然后放到llvm-6.0.0.src/tools目录下,将compiler-rt-6.0.0.src.tar.xz解压,文件夹重命名为compiler-rt,放置到llvm-6.0.0.src/projects目录下。创建build文件夹。
下载二进制文件,直接解压即可(其实只是为了要libclang.lib这个文件)。
cmake安装:
下载路径:https://cmake.org/download/ (国外网站特别慢)
下载windows版64位压缩包格式即可。
按此博客https://blog.csdn.net/pl19920614/article/details/54143499?utm_source=blogxgwz1中的设置编译。
最后用vs打开生成的LLVM.sln,使用Release模式编译,最后生成的结果在Release文件夹下(注意第一次编译时间会非常长,我自己的电脑用了快一个小时才编译完!)。
编译:
在YouCompleteMe\third_party路径下新建build文件夹即YouCompleteMe\third_party\build在该路径下执行指令:
cmake -G "Visual Studio 15 2017 Win64" -EXTERNAL_LIBCLANG_PATH="C:\cpy\Softs\Install\LLVM\bin\libclang.dll" -DUSE_SYSTEM_LIBCLANG=ON -DPATH_TO_LLVM_ROOT="C:\cpy\Softs\Install\LLVM" ..\ycmd\cpp
成功后可以看到build路径下有个*.sln文件,用vs打开它编译(建议也在release模式下,当然也可是使用输入指令用cmake编译),选中ALL_BUILD这项编译。编译成功后在ymd路径下release目录里有。我这里没用vs编译,而是继续在build目录下使用指令
cmake --build . --target ycm_core --config Release
third_party\ycmd目录下出现ycm_core.pyd运行gvim结果有红色的字报错,提示ycm挂掉了。
The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). Unexpected exit code 1. Type ':YcmTogglelogs ycmd_51691_stderr_em_jpj.log' to check the logs.
我们在gvim里输入:YcmDebugInfo
可以看到一些log日志的保存位置,我们打开详细看看错误原因,试了下文件都是空的!试者到YCm根目录执行指令python install.py --clang-completer
发现一闪而过(这个命令是编译c++补全支持的)报这个错的原因其实是python还差一个模块urllib3未安装,去下载(https://github.com/urllib3/urllib3)好后执行到解压目录下执行指令`python setup.py install
安装即可。继续执行之前的指令
python install.py –clang-completer`这次就能正确的执行安装了。重新执行指令
python install.py
虽然没有报错,但是打开gvim后下方还是有红色字体报错:The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer’). Unexpected exit code 1. Type ‘:YcmTogglelogs ycmd_51691_stderr_em_jpj.log’ to check the logs.试者执行指令
python install.py --rust-completer
,发现报错:ERROR: Unable to find executable ‘cargo’. cargo is required for the Rust completer.应该是缺文件了,果断重新装。