行则将至

人生在勤,不索何获

0%

Vim 常用命令

安装

怎么查看 vim 的 clipboard 功能是否开启

以下命令用来检查vim剪贴板的支持情况

1
vim --version | grep clipboard
如果结果中有这个, 前面是+号代表支持剪贴板操作, -号代表不支持。

如果系统自带vim不支持剪贴板的话, 需要重新安装: 参考:vim 使用全局剪贴板

移动光标

Vim 上下左右移动光标

1
2
3
  K
H    I
  J

模式切换

  • 进入默认是普通模式

  • Vim 切换到插入模式

按键 含义
i 在光标的前边进入插入模式
I 在光标所在行的行首进入插入模式
a 在光标的后面进入插入模式
A 在光标所在行的行尾进入插入模式
o 在光标所在行的下方插入空行进入插入模式
O 在光标所在行的上方插入空行进入插入模式
s 删除光标指定的字符并进入插入模式
S 将光标所在行清除并进入插入模式
  • Vim 切换到选中模式
按键 含义
v 普通选中
V 行选中
ctrl+v 列选中
  • Vim退出
按键 含义
:q 未改动退出
:q! 改动后不保存强制退出
:wq :w表示保存,:q表示退出
shift+z+z 保存修改并退出

编辑

Vim编辑常用命令

按键 含义
y 复制
p 粘贴
d 剪切
u 撤销
ctrl+r 重做
r 替换单个
shift+r 替换多个

Vim 中有多少个剪贴板?

Vim 有12个粘贴板依次编号为:0、1、2、...、9、a、"、+,其中 + 号为系统粘贴板,” 为临时粘贴板。系统剪切板中的内容可在其他程序中使用。上面的复制指令都可以配合剪切板进行操作。 - 用"+y 代替y将选中的内容复制到系统剪贴板,效果和ctrl-c一致。 - 用"+p代替p将剪贴板内容复制到指定位置,也可以用ctrl-vdxcs也一样,用之前前面加"+

复制

  • 单行复制:按esc键后, 然后yy
  • 全部复制:按esc键后,然后ggyG

粘贴

  • 粘贴:按esc键后, 然后p

剪切

  • 单行删除:按esc键后, 然后dd
  • 全部删除: 按esc后,然后ggdG

撤销与恢复

vim 撤销和恢复快捷键?

1
2
u         撤销操作  
Ctrl + r  恢复撤销的操作

选择

  • 全选选择: 按esc后,然后ggvG
  • 全部删除: 按esc后,然后ggdG
  • 全部复制: 按esc后,然后ggyG

解析: gg: 是让光标移到首行,在vim才有效,vi中无效  G : 光标移到最后一行  v : 是进入Visual(可视)模式  d :  删除选中内容 
y :  复制选中内容到0号寄存器 

跳转

Vim 跳转常用命令

按键 含义
^ 光标到行首
$ 光标到行尾
w 光标到下个单词开头
b 光标到所在单词开头
e 光标到所在单词结尾
gg 光标到文件的开头
G 光标到文件的结尾
  1. 跳到第一行
1
gg
  1. 跳到第10行
1
2
10gg
或10G
  1. 跳到最后一行
1
2
[shift]+g
或G

搜索

1. 进入搜索模式

  1. 打开文件后马上搜索
    1
    按[/]
  2. 编辑模式切换到搜索
    1
    先按[Esc]退出编辑,再按[/]

2. 搜索

  1. 普通搜索
1
2
3
4
5
/关键字  
# 向下找(左斜杠+关键字)

?关键字
# 向上找(逆向搜索)(问号+关键字)

注意 :搜索一些特殊的字符,例如:*、[、]、^、%、/、?、~、$ 等, 需要在它们的前面加上转义符号。

  1. 匹配搜索
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 匹配单词开头(右斜杠+小于号)
/\<关键字

# 匹配行末尾
/^关键字

# 匹配单词末尾(右斜杠+大于号)
/关键字\>

# 匹配行开头
/关键字$

/\<关键字\>
# 匹配单词全部(匹配开头和结尾的符号加起来)

3. 搜索定位

输入搜索命令后按回车开始定位

  1. 移动到下一个匹配处
1
按[n]
  1. 移动到上一个匹配处
1
按[N]或[shift]+[n]
  1. 搜索当前光标所在单词
1
2
光标移动到关键字任意位置,按[*] 或 [#] 
# 如果当前光标位置单词为the,那么执行命令 * 相当于搜索命令 /the,命令 # 等同于命令 ?the

替换

Vim 替换命令?

:s(substitute)命令用来查找和替换字符串。语法如下:

1
:{作用范围}s/{目标}/{替换}/{替换标志}
例如 :%s/foo/bar/g 会在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)。

Tab

Vim Tab切换快捷键

快捷键 说明
ctrl + w + w 光标自动在左右侧窗口切换

配置

将配置粘贴到你的 ~/.vimrc,重新打开 Vim 即可生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
" ********************************* 插件 *********************************
" Plugins will be downloaded under the specified directory.
call plug#begin('~/.vim/plugged')

" Declare the list of plugins.
Plug 'matze/vim-move'
Plug 'plasticboy/vim-markdown'
Plug 'luochen1990/rainbow'
Plug 'jiangmiao/auto-pairs'
Plug 'tpope/vim-fugitive'
Plug 'vim-syntastic/syntastic'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " 目录树插件
Plug 'kien/ctrlp.vim'
Plug 'Yggdroot/indentLine'
Plug 'honza/vim-snippets'
Plug 'vim-scripts/indentpython'
Plug 'vim-python/python-syntax'

" List ends here. Plugins become visible to Vim after this call.
call plug#end()

" NERDTree
noremap <C-n> :NERDTreeToggle<CR>

" vim-move
map <ESC>[1;5B <A-Down>
map <ESC>[1;5A <A-Up>
map! <ESC>[1;5B <A-Down>
map! <ESC>[1;5A <A-Up>

let g:move_map_keys = 0

vmap <A-Up> <Plug>MoveBlockUp
vmap <A-Down> <Plug>MoveBlockDown
nmap <A-Up> <Plug>MoveLineUp
nmap <A-Down> <Plug>MoveLineDown

" YouCompleteMe
"打开vim时不再询问是否加载ycm_extra_conf.py配置"
let g:ycm_confirm_extra_conf=0
set completeopt=longest,menu
"python解释器路径"
let g:ycm_path_to_python_interpreter='/usr/bin/python3'
"是否开启语义补全"
let g:ycm_seed_identifiers_with_syntax=1
"是否在注释中也开启补全"
let g:ycm_complete_in_comments=1
let g:ycm_collect_identifiers_from_comments_and_strings = 0
"开始补全的字符数"
let g:ycm_min_num_of_chars_for_completion=2
"补全后自动关机预览窗口"
let g:ycm_autoclose_preview_window_after_completion=1
" 禁止缓存匹配项,每次都重新生成匹配项"
let g:ycm_cache_omnifunc=0
"字符串中也开启补全"
let g:ycm_complete_in_strings = 1
"离开插入模式后自动关闭预览窗口"
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"回车即选中当前项"
inoremap <expr> <CR> pumvisible() ? '<C-y>' : '\<CR>'
"上下左右键行为"
inoremap <expr> <Down> pumvisible() ? '\<C-n>' : '\<Down>'
inoremap <expr> <Up> pumvisible() ? '\<C-p>' : '\<Up>'
inoremap <expr> <PageDown> pumvisible() ? '\<PageDown>\<C-p>\<C-n>' : '\<PageDown>'
inoremap <expr> <PageUp> pumvisible() ? '\<PageUp>\<C-p>\<C-n>' : '\<PageUp>'

" ********************************* 公共配置 *********************************

" 基础
syntax on " 开启代码高亮
set number " 显示行号
set ruler " 开启标尺
set cursorline " 开启高亮光标所在行
set showmatch " 显示匹配括号
set encoding=utf-8 "设置vim内部编码
set history=1000 "Vim 需要记住多少次历史操作。

" 性能
set viminfo= " 关闭 viminfo (用于加快 vim 启动速度)

" 功能填补
set clipboard=unnamed " 开启系统剪贴板支持
set backspace=indent,eol,start " 开启 Backspace 键支持(否则 Backspace 无法删除字符)

" 鼠标支持
set mouse=a " 开启鼠标支持
set selection=inclusive " 指定在选择文本时光标所在位置也属于被选中的范围
set selectmode=mouse,key " 使鼠标和键盘都可以控制光标选择文本

" tab键
set ts=4 " 指定制表符(tab)等于的空格数
set tabstop=4 " tab 键相当于 4 个空格
set softtabstop=4 " 开启软制表(如果这4个空格是用tab键打出来的删除会一起删除)
set shiftwidth=4 " 指定自动缩进时缩进4个空格
set smarttab " 开启智能 tab

" 缩进
set smartindent " 开启智能缩进
set autoindent " 开启自动缩进
set cindent " 开启C缩进(对C、C++语言文件有效)
::
" 其它配置
set viminfo='1000,<500 " 复制粘贴扩大到500
set backupcopy=yes " 开启备份时行为为覆盖
set cmdheight=1 " 设置命令行的高度为1

" 代码
set foldenable " 打开折叠

" 搜索
set ignorecase " 设置默认进行大小写不敏感查找
set smartcase " 如果有一个大写字母,则切换到大小写敏感查找
set hlsearch " 高亮搜索,如果需要清除屏幕搜索高亮,可以在Vim命令行模式使用命令 :noh
set incsearch " 递进搜索
set paste " 取消自动注释#后所有行

noremap s :noh<CR> " 按下s取消高亮结果显示,本来按下s删除当前字符并进入插入模式

"设置代码折叠,映射空格键来折叠和取消折叠
set foldenable "开始折叠
set foldmethod=indent "设置indent折叠方式
set foldcolumn=0 "设置折叠区域的宽度
setlocal foldlevel=1 "设置折叠层数
set foldlevelstart=99 "打开文件默认不折叠
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc': 'zo')<CR>

"map F5 to run files
map <F5> :call CompileRun()<CR>
func! CompileRun()
exec "w"
if &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'python'
exec "!python3 %"
endif
endfunc

"PEP8风格设置,python代码风格标准
au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79 |
\ set expandtab |
\ set autoindent |
\ set fileformat=unix
" ********************************* 快捷键 *********************************

" -- Control + a to select all file
inoremap <C-a> ggVG
nnoremap <C-a> ggVG
vnoremap <C-a> ggVG

" -- Control + s to save
inoremap <C-s> <Esc>:w<CR>i
nnoremap <C-s> :w<CR>
vnoremap <C-s> :w<CR>

noremap R :source $MYVIMRC<CR>
" ********************************* 主题 *********************************

" color schema
" 从 https://github.com/tomasr/molokai 获取molokai.vim 放到~/.vim/colors
colorscheme molokai
set t_Co=256

安装语法补全插件 YouCompleteMe

除了通过 Vundle 安装语法补全 YouCompleteMe,也可以自己手动编译安装,这里有另外一种更加简单的方法。

1
2
3
4
5
6
7
8
# 试试这个命令,看是否已经安装 vim-addons
$ vim-addons
# 如果没有安装 vim-addons,则需安装 vim-addon-manager
$ sudo apt-get install vim-addon-manager
# 开始安装 YouCompleteMe
$ sudo apt-get install vim-youcompleteme
# 将 YCM 加入 addons 管理器中
$ vim-addons install youcompleteme