打开vim时指定打开多个文件,而且垂直分割窗口:
vim -O file1.c file2.c
水平打开则是:
vim -o file1.c file2.c
如果一开始只有file1.c独占一个窗口,想垂直打开另一个,则:
vs file2.c
同理,如果想水平打开另一个文件:则:
sp file2.c
如果单单输入sp或者vs也是可以的,只是这时是一个文件被分成多个窗口
已经打开了多个窗口,想调整各个窗口的大小,使用res命令,高度调节:
res +12
res -12
宽度调节:
vertical res +12
vertical res -12
查看当前文件名和当前位置:ctrl + g 或者 :f
查看当前光标下的符号的下/上个出现的地方:先按shift + 8 再按n和N上下寻找
获取某个插件的帮助文档(拿taglist来说):
:help taglist
换主题:
:colorscheme <空格+tab>
找到自己喜欢的然后按回车
上面讲的只是临时设置,永久设置方法如下:
在~/.vimrc中添加colorscheme morning
添加主题的方法:
1、创建~/.vim/colors目录
2、去网上找别人写好的,或者自己写一个主题文件,以.vim为后缀,放在上面讲的那个目录
3、在~/.vimrc中添加colorscheme <你自己的主题>
重复上次操作:.
查看命令历史,或者想输入上条命令:
在普通模式下直接按"q",然后按":"
撤销:u
重来:ctrl + r
vundle使用
==========
vundle是一个vim下的一个插件管理器(vim本身没有插件管理器),它本身也是一个插件。
有了它,你只要在.vimrc文件中写入你想要的插件名它就会帮你安装插件,你删除插件名它就会帮你卸载掉,比手动维护方便得多。
项目地址:
https://github.com/gmarik/Vundle.vim.git
或者:
https://github.com/VundleVim/Vundle.vim.git
两个都是一样的库
安装:
1. git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
2. 把下面这段文本(这只是个示例文件)写入你的$HOME/.vimrc文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
3. 进入vim,然后运行":PluginInstall"
可能遇到的问题及解决办法:
问题:在vim中输入":PluginInstall"提示"E492 Not an editor command"
办法:"PluginInstall"这个命令本来就不是vim的原生命令,它来自vundle,既然vim不能识别,很有可能是vim没能识别到vundle。
你可能把~/.vimrc文件做成/etc/vimrc或者别的什么了,得改成~/.vimrc,因为这个插件不支持全局配置
问题:切到root用户后原来的vimrc不起作用了
办法:你换用户了,这意味着"~/"目录发生了变化,所以你得重装一次vundle,重新设置一份.vimrc文件,当然你必须全程保持是root用户
使用vundle删除插件
================
:PluginList
光标定位到你想删除的插件,按shift+d
重新编辑.vimrc,把刚刚删除的那个插件的相关项删除
vundle插件库
============
网上很多,一个好用的是:vimawesome.com/
ctags使用
=========
ctags不是vim的插件,是一个独立的程序,用来生成代码索引库的
安装:sudo apt-get install ctags
使用前必须生成数据库:ctags -R
符号跳转:ctrl + ]
符号跳转不包括局部变量,想要查看局部变量,可以这样输入:gd(先按g,再按d)
~/.vimrc设置:
set tags=~/path/tags
set tags=tags;
set autochdir
taglist使用
===========
安装(vundle作为插件管理器):在~/.vimrc中添加:Plugin 'taglist.vim',然后在vim界面中执行:PluginInstall,等待安装完成
<Space> 显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
~/.vimrc设置:
map <f3> :TlistToggle<CR>
let Tlist_Use_Right_Window=1 " taglist is in the right side
let Tlist_Exit_OnlyWindow=1 " if taglist is the last windown, quit vim
let Tlist_WinWidth=35
let Tlist_Show_One_File=1 " don't show several files' taglist, just show current one
airline使用
===========
airline可以在vim的界面下部显示一个状态栏,它同时还集成了很多其他的插件
安装(vundle作为插件管理器):在~/.vimrc中添加:
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
然后在vim界面中执行:PluginInstall,等待安装完成
cscope使用
==========
我不怎么喜欢cscope,讲得简单点,cscope和ctag都不全面,得两个都用,两个都用也还是不好用,比不过eclipse
cscope不是vim的插件,它是一个独立的程序,vim编译(一般默认是使能的)的时候也要支持cscope才能跟cscope联动
安装:
1、vim必须在编译时就有加上--cscope(好像是这个),如果vim没有,就要卸载,加上那个选项重新编译安装
2、sudo apt-get install cscope
使用:
1、在源码目录下执行cscope -Rbk生成数据库cscope.out文件
2、输入这个语句让cscope索引你想要的文件格式:find . -name "*.h" -o -name "*.c" -o -name "*.S" >> cscope.files
3、在vim中输入cs add cscope.out
4、在vim中用光标悬停在一个符号的某个字符上,然后按ctrl + 空格,放开后再按s,找到相关引用。除了这
个快捷键,还有很多,具体都在~/.vim/plugin/cscope_map.vim里面,这是cscope自己生成的vim配置文件
一般不用改
注意:vim系统设置set autochdir会导致cscope不能进入子目录,所以如果使用cscope,就不能有这项
~/.vimrc相关配置:
map <F5> :!cscope -Rbk<CR>
nerd-tree使用
=============
这是一个文件浏览器插件
安装(vundle作为插件管理器):
在~/.vimrc中添加:Plugin 'scrooloose/nerdtree'
然后在vim中输入:PluginInstall
~/.vimrc相关配置:
autocmd StdinReadPre * let s:std_in=1
map <F2> :NERDTreeToggle<CR>
选定一个单词
============
先按v,再按下面任一命令
aw a word
iw inner word
aW a WORD
iW inner WORD
as a sentence
is inner sentence
ap a paragraph
ip inner paragraph
a[|] a[] block (这里的'|'是或的意思,也就是说'a['和'a]'都表示一个[]块)'{} &al;>()与[]作用类似
at a tag (这里的tag可以是html或xml中任何标签对)
it inner tag
删除行尾空格
============
vim查看模式下输入':',然后输入'%s/\s\+$//g'
查找和替换
=========
:[range]s/from/to/[option]
range
"1,n": 表示从第1行到n行
"%": 表示整个文件,同"1,$"
".,$": 表示从当前行到文件尾
空: 表示当前行
option
g 表示整个文件
n 表示只查找不替换
i 表示忽略大小写
c 表示逐个确认替换
空 表示仅对每行第一个匹配串进行替换
from
匹配字符串,可以是正则表达式
to
替换字符串,不能是正则表达式
例子
====
:%s/hello//gn # 统计当前文件所有的hello的个数
%s/a$/a \\/g # 在当前文件所有的以a结尾的字符串的后面加上' \'
解决粘贴代码时乱缩进的问题
=========================
粘贴前输入":set paste"
粘贴后输入":set nopaste"
vim切回终端(vim与shell交互)
===========================
vim按ctrl+z切到终端
终端按fg切回vim
刷新文件
=======
:e
quickfix
=========
quickfix是一个特殊的vim窗口,它使得vim能像IDE一样,显示编译结果和查询结果
不管是显示编译结果还是查询结果,只需要在make或者vimgrep之后输入cw即可打开quickfix,cn和cp分别是下一项和上一项,ccl是关闭quickfix
vim内部执行make
============================
1. :set makeprg=mingw32-make " 设置你的make程序,如果有空格要加\转义符
2. :make
3. cc " 查看详细错误
查看vim的版本,安装了哪些功能,vimrc的位置
=======================================
:version
或者
vim --version
ubuntu彻底卸载vim
=================
sudo apt-get remove vim
sudo apt-get remove vim-runtime
sudo apt-get remove vim-tiny
sudo apt-get remove vim-common
sudo apt-get remove vim-doc
sudo apt-get remove vim-scripts
编译安装VIM
===========
1. sudo apt-get install libncurses5-dev python-ubuntuone-devtools python3-all-dev # 安装必要软件
2. 下载VIM源码
3. ./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-python3interp=yes \
--with-python-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr/local \
--with-x
注意:
"--with-python-config-dir"得换成你自己的目录
"--with-x"大概是使能X11的意思。我要的是它的clipboard功能,有了它VIM才能复制内容到系统剪贴板
4. make
5. sudo make install
可能会遇到的问题:
* configure说python3的cache有问题。---> sudo make distclean
* 如果--with-x编译不成功,安装X11:apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev libxmu-dev libxmuu-dev
* 明明使能了clipboard功能,但是:reg没看到"+这个寄存器,复制到系统剪贴板也没用。可能原因:你的X11授权有问题,比如你是root,但是X11只允许你的ubuntu
中一个非root用户访问,比如sam。解决办法:cp /home/sam/.Xauthority /root
vim复制到系统剪贴板
===================
首先确保你的vim使能了clipboard功能
vim --version | grep "clipboard"
如果没有,重新编译vim,加上--with-x
复制:"+y
粘贴:"+p
引申:
输入:reg可以看到vim有很多剪贴板。其中""是默认剪贴板,"+是系统剪贴板。y和p这两个命令之前加上剪贴板的名字就可以指定剪贴板
gvim去掉烦人的un~文件
=================
在gvim的安装目录找到vimrc_example.vim文件,把下面两行(else 和 set...)注释掉:
if has("vms")
set nobackup " do not keep a backup file, use versions instead
" else
" set backup " keep a backup file
查找字符串
==========
使用vim自带的vimgrep(不好用,速度又慢)
====================================
:vim /xxx/gj ** " xxx即是你想要查找的字符串
" g指的是如果一行有多个匹配那每个匹配都显示,如果没有g,那么一行中的多个匹配只算一个
" j指的是查找结束后不要跳转到第一个匹配,如果没有j,就跳转到第一个匹配
" **代表当前目录和所有子目录;*是当前目录;**/*是仅子目录;*.c是当前目录所有c文件;%代表当前文件;
:cw " 打开quickfix窗口查看所有匹配
:ccl " 关闭quickfix窗口
使用Leaderf插件
==============
vundle安装:Plugin 'Yggdroot/LeaderF'
需要安装依赖:rg(ripgrep):
curl -LO https://github.com/BurntSushi/ripgrep/releases/download/11.0.2/ripgrep_11.0.2_amd64.deb
sudo dpkg -i ripgrep_11.0.2_amd64.deb
使用:
* 输入:Leaderf[File][ rg]查找文件和匹配项,ctrl+{J,K}上下选择匹配项,enter跳转到匹配项
* 进入Leaderf查到东西以后按tab可以让Leaderf窗口停在vim里面,你可以把它当普通窗口一样对待,按j,k移动,p预览, F1获取帮助
vim的配置文件
============
输入:version可以查看vim的配置文件的位置,要注意的是:~/_vimrc即使没说也是默认的gvim和vim的配置文件
vim改文件编码
=============
:set fileencodings=utf-8,gbk " 除了utf-8和gbk,你还可以输入更多,或者只输入一个也行
:e " 改完编码别忘了刷新,不然还是老样子。当然了,如果你把set fileencodings=xxx放到vimrc就不用刷新了
回到之前的目录(使用NERDTree)
============================
图1
===========================================
" Press ? for help | 1
|~
.. (up a dir) |~
/e/code_pool/table/ |~
Makefile |~
README.txt |~
table.c |~
table.h |~
TODO.txt
图2
===========================================
" Press ? for help | 1
|~
.. (up a dir) |~
/e/code_pool/ |~
+ awtk/ |~
+ busybox-1.31.1/ |~
+ ECG2.0_new/ |~
+ emWinAllStuff/ |~
+ fft-c/ |~
+ fftw-3.3.8/ |~
+ gear-lib/ |~
+ gsl-2.2.1/ |~
+ kiss_fft130/ |~
+ kkk/ |~
+ linux-4.13.12/ |~
+ linux-stm32/ |~
+ PracticeOfemWin/ |~
+ PracticeOfSTM32F429DiSC/ |~
+ qt_chart_practice/ |~
+ table/ |~
图3
===========================================
" Press ? for help | 1
|~
.. (up a dir) |~
/e/code_pool/ |~
+ awtk/ |~
+ busybox-1.31.1/ |~
+ ECG2.0_new/ |~
+ emWinAllStuff/ |~
+ fft-c/ |~
+ fftw-3.3.8/ |~
+ gear-lib/ |~
+ gsl-2.2.1/ |~
+ kiss_fft130/ |~
+ kkk/ |~
+ linux-4.13.12/ |~
+ linux-stm32/ |~
+ PracticeOfemWin/ |~
+ PracticeOfSTM32F429DiSC/ |~
+ qt_chart_practice/ |~
~ table/ |~
Makefile |~
README.txt |~
table.c |~
table.h |~
TODO.txt |~
如图1,一开始你位于'/e/code_pool/table/'目录,然后你点了'.. (up a dir)'键,去到上层目录,也就是'/e/code_pool/'目录,如图2。
此时你按下'table'文件夹,想回到'/e/code_pool/table/'目录,却发现NERDTree的显示不同了,如图3。
那么,怎样让目录树显示跟以前一样呢?光标移到'table'文件夹,按下'C'即可。
一些NERDTree的其他常用键
======================
r 刷新目录树
O 展开光标指定目录下的所有子目录
X 折叠光标指定目录下的所有子目录
m 打开功能菜单
I 打开或关闭隐藏文件的显示
F 显示或不显示文件
窗口
====
ctrl+w [h,j,k,l] 移动焦点到上下左右窗口
ctrl+w x 交换上下左右窗口
编辑二进制文件
=============
vim -b file.bin " -b是以二进制打开的意思
:%!xxd
编辑十六进制部分和地址部分,注意地址部分要严格按照顺序递增
此时先不保存,输入:%!xxd -r把文本转成16进制
:wq
* 推荐使用'https://vimawesome.com/plugin/hexmode'这款插件,它也是用的xxd,但是做了一些封装,使用更方便:
$ vim -b file.bin # 用-b选项打开bin文件会触发hexmode插件,一进去就是16进制编辑
$ # 如下所示,vim编辑16进制的界面是这样的:
00000000: 00 88 99 aa bb 55 66 77 .....Ufw
00000008: aa bb cc dd ee ff 01 02 ........
00000010: 00 01 02 03 04 05 06 07 ........
# 从左到右分为三部分,分别是地址部分,数据部分和转义部分
# 把数据部分改好后检查地址部分,必须是16进制格式且连续递增(递增+8还是+1取决于xxd 的-c -g配置。上面这个是+8的)(可以不用补零对齐)
# 最右边的转义部分改不改无所谓,建议删了
$ vim保存退出即可
* vim编辑16进制文件最麻烦的就是改地址,地址错了整个文件就废了。现在无论是vim自带的xxd还是插件,我没找到一个可以自动改地址的。
倒是有一个插件:'https://vimawesome.com/plugin/visincr',它可以把一整列数据按顺序递增或者递减。所以可以用它来配合vim:编辑完数据
后用它来修改所有的地址(地址不需要补零对齐)。方法是:ctrl+v选中一列,输入:IIX命令即可
* 无论是vim自带的xxd还是插件,我没找到一个可以根据光标位置自动高亮右边的转义部分的,这是vim不如GUI编辑器的一个地方
自动生成一列连续数字
==================
这个插件'https://vimawesome.com/plugin/visincr'使vim能像Excel那样,用一个命令可以使一整列填满一串连续数字。支持10进制,8进制,16进制和日期
删除包含特定字符的行(匹配删除)
==============================
比如带有abc的行
:% g/abc/d