echo ----vim----
:set nu
:vs :sp 分屏
a/i/o A/I/O 进入插入模式
v 是块状选择 V是以行为单位选择 ctrl+v是区域选择 y是复制,x是剪切, 然后p是粘贴 d是剪贴
viw 首先v进入选择模式 iw选择当前单词 但是不带空格;vaw选择当前单词,(带空格)
vi" 首先v进入选择模式, i" 选择当前行 ”“包含的内容,然后进行操作; va"是选择""包含的内容,包含”“。
在编辑模式下:ctrl+h 删除上一个字符 ctrl+w 删除上一个单词 crtl+u 删除当前行 也可以在终端下使用(ctrl+a 快速定位到开头)
ctrl+[ 或者 ctrl +c 快速切换到normal模式 代替ESC
gi 快速跳转到你最后一次编辑的地方并进入编辑模式
w/W 快速移动到下一个单词的开头 e/E快速移动到上一个单词的结尾 b/B快速移动到上一个单词的开头(如果移动到上一个单词的结尾,那么就是be, 如果想移动到单词的结尾的话,那么就是we)
(小写和大写w、e、b的区别在于,大写的话会以空格为分隔符
:syntax on 设置高亮
快速搜索
使用 f{char} 快速移动到char字符上,t移动到char的前一个字符,如果第一次没有搜到,那么使用分号;搜索下一个; 使用逗号,搜索上一个
f是往后搜索,F是往前搜索
0是移动到行首 $是移动到行尾 ^是快速移动到行首(没有空格的地方,与0的区别在于。0是真的行首 ^是非空行首)
使用()在句子间移动,{}在段落之间移动
gg/G 移动到文件开头和结尾,你可以使用ctrl+o 快速返回
H/M/L 跳转到屏幕的开头(head) 中间(middle)和结尾(lower)
ctrl+u ctrl+f 上下翻页, zz把屏幕置为中间
在normal 模式下快速删除
x 快速删除一个字符,2x删除2个字符;
d配合文本对象快速删除一个单词daw
d和x都可以搭配数字来执行
dw 是从光标开始到单词结尾的删除(包含删除空格)
daw 是删除光标所在的单词(包含删除空格) diw是删除光标所在的单词(不删除空格)
d2aw 删除2个单词,可搭配数字使用
dd 是删除行 5dd是删除5行
dt " 是从光标下到“之间的内容删除掉
d0 d$ 快速删除到开头/行尾
快速修改
r(replace)快速修改 2r是同时修改2个单词 R
s 是删除单个单词并且进入插入模式,2s 删除2个单词并且进入插入模式, S是删除正行并且进入插入模式
c 也是删除并且进入插入模式, cw 从光标下开始删除单词并且进入插入模式 caw删除光标下单词并且进入插入模式 ct” 从光标下到“开始删除,然后进去插入模式 c to " ci" 快速删除当前行”“包含的内容,然后进入插入模式; ca" 快速删除当前行”“包含的内容,包含""
r是修改单个字母 s是修改多个字母并且进入插入模式 c是配合单词 cw caw ct来使用
查询
使用/ 或者 ?进行前向或者反向搜索
使用n/N跳转到下一个或者上一个匹配
使用或者#进行当前单词的前向匹配和后向匹配
(当时会用?和#进行后向匹配的时候,n是往上走,N是往下走,跟/和相反了)
搜索替换
替换 :% s/old/new/g(g是全局替换 c是确认后替换,n是报告匹配的次数而不替换,可以用来查询匹配次数) (%是全部 可以是数字 1-10;表示1到10行)
统计个数 :% s/new//n 统计个数
也可以使用正则表达式替换
Buffer切换
使用:ls 会列举当前缓冲区,然后使用:b n跳转到第n个缓冲区
:bpre :bnext :bfirst :blast 上一个 下一个 第一个 最后一个
或者使用:b buffer_name 加上tab补全来跳转
:vs 左右分屏 :sp 上下分屏 ; ctrl+w + w(在窗口间循环切换) ctrl+w+h、j、k、l 切换到左边、下边、上边、右边的窗口
:ctrl+w +HJKL把当前窗口往左边、下边、上边、右边移动
[N]ctrl+w+_ 设置活动窗口的高度为N行
[N]ctrl+w+| 设置活动窗口的高度为N列
Tab标签页操作
:tabe {filename} 在新的标签页打开{filename}文件,也可以直接:tabe 新建一个空的标签页
:tabc 关闭当前标签页
:tabo 只保留活动标签页,关闭所有其他标签页
:tabn {N} 或者 {N} gt 切换到编号为{N}的标签页
:tabn 或者gt 切换到下一个标签页
:tabp 或者gT切换到上一个标签页
text object - 文本对象
vim复制粘贴与寄存器的使用
yim 复制一个单词 yy复制一行 p是粘贴
insert模式下复制粘贴会缩进的问题
- 设置 :set paste 然后粘贴 最后:set nopaste
vim复制到系统剪贴板
首先查看vim是否支持clipboard( vim --version | grep clipboard) 如果clipboard前面是+号就支持
然后复制 v "+y 就可以完成复制了
vim 宏
qa 进入编辑模式,然后修改,然后EST进入normal模式,按q退出录制
然后进入下一行@a 把录制的内容粘贴
也可以批量 VG 选择所有,然后:normal @a 批量操作
感觉就是录制很多命令,然后一行一行的执行录制的命令
也可以 VG选择所有只有 :normal I#
:ctrl +P 现实上一次执行的命令
常见的三种补全类型
ctrl+n和ctrl+p 补全单词, 使用N(shift+n)进行下一个,P(shift+p)进行上一个选择
ctrl+x ctrl+f 补全文件名;继续使用ctrl+n ctrl+p 进行下一个或者上一个进行赛选
ctrl+x ctrl+o 补全代码,需要开启文件类型检查,安装插件
修改配色方案
:colorscheme <ctrl+d> 显示所有配色
:colorschema 配色
映射
:map 新的快捷键 要映射的快捷键 eg: :map - x 把x的功能隐射到-号上去
vim 常用模式 normal/visual/insert都可以映射
用:nmap :vmap :imap 定义映射只在normal、visual、insert分别有效
:imap <c-u> <Esc>ddi 把insert模式下的删除一行映射到ddi
vim 提供了非递归映射,这些命令不会递归解析
使用*map 对应的 nnoremap vnoremap inoremap
任何时候你都应该使用非递归映射,拯救自己和插件作者
nerdtree目录树快捷键
o 打开文件
go 打开文件,但是光标还在nerdtree
t 打开文件,创建的是tab;T是打开文件,创建的是tab,光标停留在nerdtree
x 收起当前打开的目录 X收起所有打开的目录
P 跳转到当前的根路径 p跳转到光标所在的上一级路径 px 关闭当前根目录 PX关闭整体
u 设置上级目录为根目录 U设置上级目录为根目录,但是维持打开状态
C 将根路径设置为光标所在的目录
r 刷新光标所在的目录 R刷新当前根路径
I显示或者不显示一场文件
q 关闭nerdtree
A 全屏显示nerdtree ,或者关闭全屏显示
m 新建文件或者文件夹
:NERDTree 打开目录树
gcc 添加注析:
-----------vim的配置 (使用 vim-plug 管理工具)------------
set number
set modifiable
syntax on
"colorscheme SpaceVim
:nnoremap <c-h> <c-w>h
:nnoremap <c-j> <c-w>j
:nnoremap <c-k> <c-w>k
:nnoremap <c-l> <c-w>l
" 安装插件 使用插件管理工具 vim-plug "
call plug#begin('~/.vim/plugged')
"
Plug 'mhinz/vim-startify'
" 目录树
Plug 'preservim/nerdtree'
"
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'yggdroot/indentline'
"Plug 'ctrlpvim/ctrlp.vim' # 搜索功能,感觉不好用
"Plug 'easymotion/vim-easymotion'
"Plug 'junegunn/fzf.vim' "搜索
" 主题风格
Plug 'w0ng/vim-hybrid'
" 大纲
Plug 'majutsushi/tagbar'
" 补全功能
" if has('nvim')
" Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
" else
" Plug 'Shougo/deoplete.nvim'
" Plug 'roxma/nvim-yarp'
" Plug 'roxma/vim-hug-neovim-rpc'
" endif
" 格式化
Plug 'sbdchd/neoformat'
" 快速注析
Plug 'tpope/vim-commentary'
Plug 'artur-shaik/vim-javacomplete2'
let g:deoplete#enable_at_startup = 1
call plug#end()
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
"let g:ctrlp_map = '<c-p>'
"nmap ss <Plug>(easymotion-s2)
set background=dark
colorscheme hybrid
nmap <F8> :TagbarToggle<CR>
" 补全java代码
let mapleader=","
autocmd FileType java setlocal omnifunc=javacomplete#Complete
nmap <F4> <Plug>(JavaComplete-Imports-AddSmart)
imap <F4> <Plug>(JavaComplete-Imports-AddSmart)
nmap <F5> <Plug>(JavaComplete-Imports-Add)
imap <F5> <Plug>(JavaComplete-Imports-Add)
nmap <F6> <Plug>(JavaComplete-Imports-AddMissing)
imap <F6> <Plug>(JavaComplete-Imports-AddMissing)
nmap <F7> <Plug>(JavaComplete-Imports-RemoveUnused)
imap <F7> <Plug>(JavaComplete-Imports-RemoveUnused)
"
"nmap <leader>jI <Plug>(JavaComplete-Imports-AddMissing)
"nmap <leader>jR <Plug>(JavaComplete-Imports-RemoveUnused)
"nmap <leader>ji <Plug>(JavaComplete-Imports-AddSmart)
"nmap <leader>jii <Plug>(JavaComplete-Imports-Add)
"
"imap <C-j>I <Plug>(JavaComplete-Imports-AddMissing)
"imap <C-j>R <Plug>(JavaComplete-Imports-RemoveUnused)
"imap <C-j>i <Plug>(JavaComplete-Imports-AddSmart)
"imap <C-j>ii <Plug>(JavaComplete-Imports-Add)
"
"nmap <leader>jM <Plug>(JavaComplete-Generate-AbstractMethods)
"
"imap <C-j>jM <Plug>(JavaComplete-Generate-AbstractMethods)
"
nmap <leader>jA <Plug>(JavaComplete-Generate-Accessors)
nmap <leader>js <Plug>(JavaComplete-Generate-AccessorSetter)
nmap <leader>jg <Plug>(JavaComplete-Generate-AccessorGetter)
nmap <leader>ja <Plug>(JavaComplete-Generate-AccessorSetterGetter)
nmap <leader>jts <Plug>(JavaComplete-Generate-ToString)
nmap <leader>jeq <Plug>(JavaComplete-Generate-EqualsAndHashCode)
nmap <leader>jc <Plug>(JavaComplete-Generate-Constructor)
nmap <leader>jcc <Plug>(JavaComplete-Generate-DefaultConstructor)
"
"imap <C-j>s <Plug>(JavaComplete-Generate-AccessorSetter)
"imap <C-j>g <Plug>(JavaComplete-Generate-AccessorGetter)
"imap <C-j>a <Plug>(JavaComplete-Generate-AccessorSetterGetter)
"
"vmap <leader>js <Plug>(JavaComplete-Generate-AccessorSetter)
"vmap <leader>jg <Plug>(JavaComplete-Generate-AccessorGetter)
"vmap <leader>ja <Plug>(JavaComplete-Generate-AccessorSetterGetter)
"
nmap <silent> <buffer> <leader>jn <Plug>(JavaComplete-Generate-NewClass)
nmap <silent> <buffer> <leader>jN <Plug>(JavaComplete-Generate-ClassInFile)