VIM妙⽤及linux使⽤技巧(包括vim插件管理器、指令与键盘映射、打开多个⽂件、奇偶删。。。
前⾔
vim 是个⾮常⾼效、⾮常好⽤的⼯具,很多⼈⼀旦开始使⽤ Vim 之后就再也⽆法⾃拔。然⽽, Vim 仍然有其⾃⾝缺陷,对于普通⽤户来说,很难在⼊门的时候就体会到Vim的所谓⾼效性,同时,为了展⽰⼀下⾃⼰的软件开发功底,及年限,学精vim使⽤是必不可少的!
vim 打开⽂件
0、在VIM中⽤正则表达式批量移动、复制和删除⽂本:
:n1,n2 m n3    移动n1-n2⾏(包括n1,n2)到n3⾏之下;
:n1,n2 co n3    复制n1-n2⾏(包括n1,n2)到n3⾏之下;
:n1,n2 d        删除n1-n2⾏(包括n1,n2)⾏;
1、vim 打开⼀个⽂件后,如何打开另⼀个⽂件?
"Esc" --> ":" --> "vsp" --> <file_name>
按下Esc 进⼊末⾏模式,之后输⼊ ":vsp" 空格 ⽂件名
:vsp file_name
2、是否可以在vim直接打开多个⽂件?
效果类似于先:vsplit, 然后:open file2。
⽅式:
vim -o file1 file2
打开的两个⽂件上下窗⼝分布
vim -O file1 file2
打开的两个⽂件左右窗⼝分布
在搜索中发现其他学习点:
vim file1 file2 file3
打开后使⽤":bn" 可以在不同⽂件中切换。也可以⽤":n" , ":e#"来切换
亲⾃测试之后发现,可以⽤ vim -O file1 file2 file3这种⽅式,⽤bn来进⾏切换。
终⽌操作 【ctrl+c】
快速的从命令的尾部切换⾸部【ctrl+a】
快速的从命令的⾸部切换尾部【ctrl+e】
使⽤键盘的上下键可以查看曾经输⼊过的命令,或者history|grep "hi"
vim指令与键盘映射
在windows中有些组合键,⽐如win+d可以关闭所有窗⼝,win+l可以锁屏,⽽leader就有点像win键,告诉vim:我要⽤快捷键了。事实上,我们不关⼼这个leader是什么,只是需要这么⼀个“前缀”。(该类⽐并不恰当,windows中组合键需要⼀起按,leader只是个前缀,先按leader再按其它的键即可)
设置leader
let mapleader = ","
这样我们就把逗号设置为mapleader(逗号是惯例,⽐较容易按,也不会影响原来的功能)。然后你就可以这样设置:
:echo mapleader
nnoremap <leader>d dd
这样你只需要按下,d就等于执⾏了dd
配置实例
定义以下快捷键,⽤于删除当前⽂件中所有的⾏尾多余空格:
nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>
定义以下快捷键,⽤于快速编辑和重载vimrc配置⽂件:
nnoremap <leader>ev :vsp $MYVIMRC<CR>
nnoremap <leader>sv :source $MYVIMRC<CR>
定义以下快捷键,使⽤前缀键和数字键快速切换缓冲区:
nnoremap <leader>1 :1b<CR>
nnoremap <leader>2 :2b<CR>
nnoremap <leader>3 :3b<CR>
光标移动
Vim的最⼤好处就是⼏乎所有的操作都是通过主键区的键位进⾏操作,双⼿不⽤离开键盘主区
◎h、j、k、l,分别是左下上右移动光标,前⾯加上n,可以重复移动多次,例如3j就可以往下移动3⾏
◎^,跳到⼀⾏的开始
◎$,跳到⼀⾏的结束
◎gg,跳到⽂本的第⼀⾏
◎G,跳转到⽂本的最后⼀⾏
◎nG或者ngg,跳转到第n⾏,例如:10G,跳转到第10⾏;20gg,跳转到第20⾏
提⾼ Git ⼯程中 Ctrl-P 的执⾏效率
将下⾯的内容添加到你的 .vimrc ⽂件中(配置使⽤来使⽤ git 或 silver 查⼯具来⾃动补全):linux系统vim编辑器
et g:ctrlp_use_caching = 0
if executable('ag')
set grepprg=ag --nogroup --nocolor
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
else
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f']
let g:ctrlp_prompt_mappings = {
'AcceptSelection("e")': ['<space>', '<cr>', '<2-LeftMouse>'],
}
endif
注:建议使⽤ vim-scripts/gitignore 插件。
vim插件管理器Vundle
安装git 和 vim,git 其中是⽤来下载插件包的。
#(Ubuntu)
apt install -y vim git
#(centos)
yum  install -y vim git
vim的插件都是默认安装在~/.vim下⾯,vim缺乏默认的插件管理器,如果每个插件都⼿动下载然后在vi ~/.vimrc中配置的话会很繁琐很费劲,所以选⽤Vundle来管理插件,vundle分别是 Vim 和 Bundle 的缩写,它是⼀款能够管理 Vim 插件的⼯具,Vundle 为每⼀个你安装的插件创建⼀个独⽴的⽬录树,并在相应的插件⽬录中存储附加的配置⽂件。
因此,相互之间没有混淆的⽂件。简⾔之,Vundle 允许你安装新的插件、配置已有的插件、更新插件配置、搜索安装的插件和清理不使⽤的插件,所有的操作都可以在⼀键交互模式下完成。
git clone github/VundleVim/Vundle.vim.git  ~/.vim/bundle/Vundle.vim
将vundle插件,安装到vim,然后在⽤户⽬录下,新建⽂件 vim ~/.vimrc,在⾥⾯写配置⽂件
set nocompatible " be iMproved, required
set autoindent
set tabstop=4
set shiftwidth=4
set expandtab
set number
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'rkulla/pydiction'
Plugin 'git://git.wincent/command-t.git'
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
call vundle#end() " required
filetype plugin indent on " required
filetype plugin on
let g:pydiction_location ='/root/.vim/bundle/pydiction/complete-dict'
然后打开vim,输⼊ :PluginInstall安装插件(命令模式),输⼊后不⽤管,插件会⾃动下载,安装成功会在每个插件⾯前会显⽰+号,或者使⽤ vim +PluginInstall +qall (Linux命令)命令安装插件。
需要添加新的插件,只需要在配置⽂件⾥⾯,添加 Plugin '⽤户/插件名'(GitHub⽤户/仓库名),然后同样执⾏插件安装命令,就可以安装了,然后配置插件⼯作⽬录,就⾏⽐如
let g:pydiction_location ='/root/.vim/bundle/pydiction/complete-dict'
记录⼏个插件常⽤命令:
:PluginList #列出安装的插件列表
:PluginUpdate #更新插件
:PluginClean #在配置⽂件中注释掉不要的插件⾏,然后执⾏这个命令就可以卸载对应的插件
:PluginSearch xxx #查vim插件
vim-vroom 插件及,提⾼单元测试执⾏效率
⽤ vim-vroom 插件以及相应的 tmux 配置来进⾏我的测试。
在你的.vimrc下添加:
Plugin 'skalnik/vroom'
然后在Vim中运⾏以下命令:
:
source %
:PluginInstall
对于Vundle版本 < 0.10.2,请⽤上⾯的Bundle替换Plugin。
随后在您的vundle下的.vimrc设置:
Plugin 'skalnik/vim-vroom'
然后运⾏
:PluginInstall
vim-room 缺省使⽤r 执⾏测试,由于我已将 Leader 映射为,因此我通过r 来运⾏测试⼯具。
由于测试在 tmux 的单独窗⼝运⾏,因此可以边看测试进展共修订代码。
Vim处理⽂本之使⽤normal命令实现奇偶⾏删除
使⽤ :normal 命令来实现奇偶⾏删除的功能。
normal 命令的使⽤形式为 :{range}norm[al][!] {commands},表⽰在 range 指定范围内的每⾏,执⾏若⼲普通模式命令 commands。
在具体介绍使⽤ normal 命令完成奇偶⾏删除之前,需要强调下 normal 命令的内部运⾏机制,即:纯粹根据 range 指定的⾏数,来逐⾏运⾏Vim普通模式下的命令 commands。
例如,在下⾯名为 ⽂本中,执⾏Vim命令 :normal 1,3 dd 并不是删除了1~3⾏的内容,⽽是删除了1、3、5⾏的内容,剩下了原始⽂件中的2、4、6⾏。
aa
bb
cc
dd
ee
ff

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。