Vim

移动

以字(符)为单位

功能按键
k
j
h
l

以单词为单位

功能按键
前一个单词尾ge
后一个单词首w
本单词首(已在本词首则跳到前一单词首)b
本单词尾(已在本词尾则跳到后一单词尾)e

以屏幕为单位

功能按键
向下翻页CTRL-f
向上翻页CTRL-b
向下翻半页CTRL-d
向上翻半页CTRL-u
向上一行CTRL-y
向下一行CTRL-e
光标移到屏幕上方H
光标移到屏幕中间M
光标移到屏幕下方L
光标所在位置移到屏幕上方zt
光标所在位置移到屏幕中间zz
光标所在位置移到屏幕下方zb

行号

功能按键
跳到第 num 行:numnumGnumgg

文件

功能按键
跳到文件头gg
跳到文件尾G

编辑

复制

功能按键
复制光标所在单词yiw
复制光标所在行yy

粘贴

功能按键
在光标之后粘贴p
在光标之前粘贴P

剪切

功能按键
剪切选中区域d
剪切光标所在行dd

替换

功能按键
将全文中的 str1 替换为 str2:%s/str1/str2/g
将 1 到 5 行中的 str1 替换为 str2:1,5s/str1/str2/g

大小写

功能按键
将选中内容大小写互换~
将选中内容全转为小写gu
将选中内容全转为大写gU
将当前行变成小写guu
将当前行变成大写gUU
将匹配内容替换为大写:%s/xxx/\U&/g
将匹配内容替换为小写:%s/xxx/\L&/g

注:& 代表正则表达式全部匹配项,另外还有 \1、’\2’、…、\9 代表第 1 到 9 个匹配项。

选择

功能按键
选中上一次选择的区域gv
选中括号内区域vi{vi[vi(

搜索

功能按键
向下查找字符串/str
向上查找字符串?str
查找下一个n
查找上一个N
向下查找光标所在单词*
向下查找光标所在单词#

正则表达式

功能按键
匹配单词左边界\<
匹配单词右边界\>
去重:g/^\(.*\)$\n\1/d

常用

功能按键
删除空行:g/^$/d
撤销/UNDOu
重做/REDOC-r
统计行/单词/字符/字节数g C-g
去掉 UTF-8 BOM:set nobomb
保留 UTF-8 BOM:set bomb

全局

功能按键
退出:q
强制执行!
执行外部命令:!

文件操作

功能按键
打开:e
打开文件对话框:bro e
保存:w
另存为对话框:bro w
查看历史文件列表:ol
查看并打开历史文件:bro ol
重命名当前文件:f filename

vimdiff

功能按键
移动到上一个不同处[c
移动到下一个不同处]c
该差异点使用当前文件的dp
该差异点使用其它文件的do
手动刷新重新比较:diffupdate

Buffer

功能按键
查看 Buffer 列表:ls
转到 Buffer 列表中的下一个 Buffer:bn
转到 Buffer 列表中的上一个 Buffer:bp
转到 Buffer 列表中的 num 号 Buffer:bnum
你之前待过的一个 Buffer:b#
从 Buffer 列表中删除 num 号 Buffer:bdnum

组合命令

可以使用 | 来组合命令,比如 cmd1 | cmd2

代码

功能按键
格式化代码gg=G
去除 1-20 行首的行号:1,20s/^\\s\*[0-9]\*\\s\*//g
展开全部折叠zR
展开当前层级折叠zr
全部折叠zM
当前层级折叠zm
切换折叠/展开za
递归折叠/展开当前大区块zA
折叠当前区块zc
递归折叠当前大区块zC
展开当前区块zo
递归展开当前大区块zO
格式化 json 数据:%!python -m json.tool
缩进当前行>>
反缩进当前行<<

modeline

写法:

 vim: set ft=markdown:
 vim: ft=markdown

// vim: noai:ts=4:sw=4
/* vim: noai:ts=4:sw=4 */

插件

CtrlP

基础按键 C-p

功能按键
刷新列表F5
切换文件/缓冲区/MRUC-f/b
切换全路径搜索/文件名搜索C-d
切换正则表达式模式C-r
上/下一个选项C-k/j
在新标签/垂直分割/水平分割打开文件C-t/v/x
历史选择记录的上/下一条C-p/n
创建文件和它的父路径C-y
标记并打开多个文件C-z C-o
退出 CtrlPC-c

LeaderF

功能按键
打开文件Leader-f
打开缓冲区Leader-b
打开 MRULeader-m(自定义的)
退出C-c
切换模糊查找和正则查找C-r
粘贴C-v
清空输入C-u
上/下一个选项C-k/j
在新标签/垂直分割/水平分割打开文件C-t/]/v
刷新列表F5

vim-table-mode

功能按键
删除列Leader-tdc
删除行Leader-tdd
重新格式化表格Leader-tr

markdown-preview.nvim

功能按键
预览F5
停止预览F6

导出 PDF:预览以后,使用浏览器的「打印」功能,打印机选「另存为 PDF」,取消「页眉和页脚」,然后点保存即可。

命令行

打开 Vim 时跳转到指定行:

vim +[num] filename

num 表示行号,不填则跳转到文件末尾。

打造VIM编辑器IDE

安装vim、ctags、cscope

sudo apt install vim exuberant-ctags cscope

配置/etc/vim/vimrc或~/.vimrc

set nu # 设置行号

ctags

使用

ctags -R . # 生成tags
vim -t tag # tag
:ts # tag list
:tp # tag preview
:tn # tag next
ctrl-] # enter
ctrl-t # back

配置vimrc

set tags=path/tags

cscope

使用方法

find . -name "*.[h|c]" > cscope.files
cscope -bkq -i cscope.files
cscope -d 
# exit: ctrl-d

vim中常用命令

:cscope find s ---- 查找C语言符号,即查找函数名、宏、枚举值等出现的地方  
:cscope find g ---- 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能  
:cscope find d ---- 查找本函数调用的函数  
:cscope find c ---- 查找调用本函数的函数  
:cscope find t ---- 查找指定的字符串  
:cscope find e ---- 查找egrep模式,相当于egrep功能,但查找速度快多了  
:cscope find f ---- 查找并打开文件,类似vim的find功能  
:cscope find i ---- 查找包含本文件的文 

vim插件

开启插件~/.vimrc

filetype plugin on

omnicppcomplete

功能:补全结构体的成员以及类成员

下载地址:

http://www.vim.org/scripts/script.php?script_id=1520

https://github.com/vim-scripts/OmniCppComplete

安装:在~/.vim目录下解开压缩包

tags生成命令:

ctags -R --C-kinds=+p --fields=+aS --extra=+q

taglist

下载地址:https://github.com/yegappan/taglist

配置

let Tlist_Show_One_File=1 "不同bai时显示多个文件du的zhitag,只显示当前文件的
let Tlist_Exit_OnlyWindow=1 "如果taglist窗口是最后一dao个窗口,则退出vim
let Tlist_Ctags_Cmd="/usr/bin/ctags" "将taglist与zhuanctags关联 !

操作命令:

“:TlistToggle”:打开左边的tag窗口,再输一次自动关闭,按ctrl+w可以在窗口之间进行切换

“:TlistOpen”:Open and jump to the taglist window.

“:TlistClose”:Close the taglist window.

“:TlistToggle”:Open or close (toggle) the taglist window.

echofunc

功能:自动提示函数原型

下载地址:http://www.vim.org/scripts/script.php?script_id=1735

定义两个快捷键来切换函数的不同定义。

let g:EchoFuncKeyNext='<S-n>' 
let g:EchoFuncKeyPrev='<S-p>' 

nerdtree

nerdtree是一个用于浏览文件系统的树形资源管理。

下载地址:https://github.com/scrooloose/nerdtree

vimrc配置信息:

let NERDTreeWinPos='right'
let NERDTreeWinSize=30
map <F2> :NERDTreeToggle<CR>

配置之后可以使用:NERDTree或者配置的快捷键F2开启。

pathogen

pathogen一般作为vim新手的第一个插件,用来统一管理vim插件包。

官方解释:非常容易的管理你的 ‘runtimepath’ ,在实际项目中,vim-pathogen可以在它的私有文件夹下非常轻松的安装插件和管理运行时文件

复制以下代码到你的终端

mkdir -p ~/.vim/autoload ~/.vim/bundle &&
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

添加以下代码到你的.vimrc 文件中(文件位于用户的家目录下,如果不存在该文件,可以新建一个)

execute pathogen#infect()
syntax on
filetype plugin indent on

此时pathogen已经成功安装,可以安装以下插件测试下

cd ~/.vim/bundle &&
git clone https://github.com/tpope/vim-sensible.git

参考地址: https://github.com/tpope/vim-pathogen

SuperTab

自动补全功能,给了Tab键“超能力”的 SuperTab 插件。

下载地址:https://github.com/ervandew/supertab.git

文档信息

Search

    Table of Contents