PegasusWang的课程我看了三四遍,第一遍草草而过 发现课程不错,值得细看细品,于是乎从头到尾一边看一边本机测试鬼操作,当时觉得很有帮助,对vim的使用也不仅仅停留在:wq
i
a
等很初级的命令,慢慢开始使用组合键,vimrc
中开始设置快捷键、添加插件等。但时间一长 发现不整理一版笔记,总觉得不是自己的东西 若隐若现很有神秘感(意思就是记不住)。之所以强烈推荐这个课程,是因为我感觉非常适合入门观看,视频短、直入正题、课程编排合理、见效快 简直立竿见影,而且将每个指令都解释成英文形式 方便复杂的指令很容易记住。废话不多说,上笔记。
略
key | description | 定义 |
---|---|---|
i | insert | 当前字符前插入 |
a | append | 当前字符后添加 |
o | open a line below | 当前行下一行插入 |
O | open a line above | 当前行上一行插入 |
I | insert before line | 当前行行首插入 |
A | append after line | 当前行行尾插入 |
normal mode --> insert mode : a/i/o/A/I/O
insert mode --> normal mode : Esc
save: :wq
(write and quit)
v
进入visual选择 进行字符操作 增删改查复制V
选择行 进行行操作 增删复制ctrl+v
进行方块选择v + h/j/k/l + d/y
--> 删除/复制指定多个字符:
之后执行命令。 :wq
:vs
(vertial split), :sp
(split):%s/foo/bar/g
全局替换:set nu
set nonu
设置行号显示与否ctrl+h
删除上一个字符ctrl+w
删除上一个单词ctrl+u
删除当前行 ( 以上三个快捷键在终端同样适用 ctrl+a 快速移动到开头 ctrl+e 快速移动到结尾 ctrl+b 向前移动 ctrl+f 向后移动)ctrl+c
代替Esc(但可能会中断某些插件) ctrl+[
gi
快速跳转到你最后一次编辑的地方并进入插入模式hjkl
左下上右w/W
移到下一个word/WORD开头。 e/E
下一个word/WORD尾b/B
回到上一个word/WORD开头,可以理解为backword。(word指的是一非空白符分割的单词,WORD以空白符分割的单词)f{char}
移动到char字符上, t
移动到char的前一个字符。如果第一次没搜到,可以使用;
或,
继续搜索该行下一个/上一个F{char}
反过来搜0
移动到行首第一个字符,^
移动到第一个非空白字符(0w
)$
移动到行尾, g_
移动到行尾非空白字符() {}
不常用。gg/G
移动到文件开头和结尾,可以使用ctrl+o
快速返回H/M/L
跳转到屏幕开头 head,中间 middle和结尾 lowerctrl+u ctrl+f
上下翻页,(upward/forward) zz
把当前行置为屏幕中间x
快速删除当前一个字符 X
向前删除一个字符d
(delete)配合文本对象快速删除一个单词 daw
(d around word) diw不删旁边的空格 [自己添加: dw
和cw
快速删除一个单词,不过必须在单词首字符;cw = dwi
]
dt)
(delete to )) 删除 ) 中的字符;d$
删除到行尾;d0
删除到行首3dd
删除三行4x
删除四个字符d
和x
可以搭配数字执行多次v
模式下进行批量删除 v+移动+d/x
删除cw
change word 删除当前字母 进入插入模式 (当前字符开始删除到word结尾; 删除整个word需要在开头)caw
删除当前字母 进入插入模式C
删除整行 进入插入模式ct"
删除到“位置 进入插入模式S
删除整行并进入插入模式/
或者?
进行前向或者反向搜索n/N
跳转到下一个或者上一个匹配*/#
进行当前单词的前向和后向匹配搜索结果高亮显示:
:set hls
high light search:set incsearch
include search 增量搜索,边搜索边高亮:[range]s[ubstitute]/{pattern}/{string}/[flags]
g
(global) 表示全局范围内执行c
(confirm) 表示确认,可以确认或者拒绝修改n
(number)报告匹配到的次数而不替换,可以用来查询匹配次数支持正则表达式,可精确的匹配整个单词 : %s/\
:s/old/new/g
替换所有的old:%s/old/new/gc
: 替换整个文件中的所有old,但在每次出现时提示。:n,ms/old/new/g
:替换行号n和m之间的所有old:%s/old/new/g
: 替换整个文件中的所有old:n1,n2s/old/new/g
在一定范围内替换指定字符串:ls
列举当前缓冲区:bn
跳转到第n个缓冲区:bp
previous:bn
next:bf
first:bl
last:b buffer_name
配合tab补全来跳转ctrl+w s
水平分割 :sp
ctrl+w v
垂直分割 :vs
ctrl+w w
在窗口间循环切换ctrl+w h
切换到左边窗口ctrl+w j
下边窗口ctrl+w k
上边窗口ctrl+w l
右边窗口ctrl+w =
所有窗口等宽 等高ctrl+w _
最大化活动窗口的高度ctrl+w |
最大化活动窗口的宽度dw
文本对象 单词 w , 句子 s, 段落p
aw
around word 不但会选中当前单词,还会包含当前单词之后的空格
iw
inner word 如果键入viw
,那么首先v将进入选择模式,然后iw将选中当前单词。
vi/
选中/的内容,可配合 x进行删减ci/
删除/的内容,进入插入模式va/
选中/以及/的内容:set autoindent
会自动缩进,造成代码会乱。需要使用 :set paste
,然后再进入insert模式;如果粘贴完需要自动缩进,需要执行:set nopaste
。(后期可以用插件或者映射解决)qa
寄存器名字为a,左下角显示 recording @a,执行添加操作;添加完成后按q结束录制。@a
移动到其他行,回放寄存器a的操作:
会显示:'<,'>
接着写 normal @a进行批量回放 :'<,'>normal @a
V + G
选中所有行,冒号 :'<,'>normal I"
:'<,'>normal A"
ctrl+n ctrl+p
普通关键字补全 (识别文件中匹配项,ctrl+n ctrl+p进行前后选择ctrl+x ctrl+f
文件名补全 (识别路径下文件)ctrl+x ctrl+o
全能补全 (需要开启filetype :filetype on
还需要插件):colorscheme
显示当前的主题配色,默认是default:colorscheme ctrl+d
可以显示所有的配色:colorscheme 配色名
修改配色git clone https://github.com/flazz/vim-colorschemes
cp vim-colorschemes/colors/hybrid.vim ~/.vim/colors/
vim ~/.vimrc
""""""""""""""""""""""
" Settings "
""""""""""""""""""""""
set number " Show line numbers
set encoding=utf-8 " Set default encoding to UTF-8
set hlsearch " Highlight found searches
set incsearch " Shows the match while typing
set autoindent " Enable Autoindent
set autoread " Automatically read changed files
set laststatus=2 " Show status line always
set backspace=indent,eol,start " Makes backspace key more powerful.
set showcmd " Show me what I'm typing
set tabstop=4 " Set a tab equal to four spaces
" syntax on
" set foldmethod=indent
" 设置tab
" filetype on
" Colorscheme hybrid molokai default
syntax enable
set t_Co=256
let g:rehash256 = 1
let g:molokai_original = 1
colorscheme molokai
""""""""""""""""""""""
" Mappings "
""""""""""""""""""""""
" Set leader shortcut to a comma ','. By default it's the backslash
let mapleader=','
let g:mapleader=','
" 使用 leader+w 直接保存
inoremap w :w
noremap w :w
" 使用 jj 进入normal模式
inoremap jj
" user ctrl+h/j/k/l switch window
noremap h
noremap j
noremap k
noremap l
" 定义函数SeTitle, 自动插入文件头
"func SetTitle()
"if &filetype == 'python'
"call setline(1, "\#!/usr/bin/env python")
"call setline(2, "\# -*- coding:utf-8 -*-")
"normal G
"normal o
"normal o
"call setline(5, "if __name__ == '__main__':")
"call setline(6, " pass")
"endif
"endfunc
"""""""""""""""""""""
" Plugins "
"""""""""""""""""""""
:source ~/.vimrc
:map viw
空格实现vim功能,选中整个单词:map dd
使用ctrl+d执行dd删除一行 :imap ddi
:vmap \ U
把visual模式下选中的文本大小写转换(u/U转换大小写)网络小书《笨方法学Vimscript》
《Practical Vim》
" :PlugInstall :PlugClean :PlugUpdate
call plug#begin('~/.vim/plugged')
call plug#end()
将vim插件按照vim-plug格式插入begin和end中。:PlugInstall
安装插件
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()
" vim-airline plugin configuration
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#tabline#formatter = 'default'
nmap :bn
" Plugin 1. 模糊搜索代码补全引擎
Plug 'valloric/youcompleteme'
Plug 'connorholyday/vim-snazzy'
let g:SnazzyTransparent = 1
colorscheme snazzy
Plug 'mhinz/vim-startify'
Plug 'yggdroot/indentline'
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
Plug 'easymotion/vim-easymotion'
nmap ss (easymotion-s2)
Plug 'tpope/vim-surround'
快捷键
ds
(delete a surrounding)
ros::init(argc, argv, "slam_gmapping");
实现删除slam_gmapping旁边的双引号:光标移动到双引号内,ds + "
cs
(change a surrounding)
实现替换双引号为单引号: 光标移动到双引号内,cs + " + '
ys
(you add a surrounding)
实现slam_gmapping外添加中括号:光标移动到双引号内,ys + iw + ]
pip install autopep8
,具体使用 终端:Neoformat
Plug 'sbdchd/neoformat'
Plug `w0rp/ale`
Plug 'tpope/vim-commentary'
取消注释gcgc
gcc 注释单行
gc +块操作进行多行注释
v/c+v + % + =
自动缩进 )