Vim编辑器的使用技巧

VIM编辑器的技巧

移动光标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. 简单的移动 h j k l 分别是h,l 左右移动,k,j 上下移动光标
2. e: 移动到当前单词的末尾
3. w: 移动到当前单词的开头
4. b: 移动到上一个单词的开头
5. 0: 移动到行首
6. $: 移动到行末
7. gg: 移动到文档开头
8. G: 移动到文档末尾
9. W: 向右移动一个以空格为分隔符的单词开头
10. E: 向右移动一个以空格为分隔符的单词结尾
11. B: 向左移动一个以空格为分隔符的单词开头
12. H: 移动到当前屏幕的顶部
13. M: 移动到当前屏幕的中部
14. L: 移动到当前屏幕的底部
# vim中单词的两种定义
- 广义的单词:两个空格之间的内容
- 狭义的单词:英文单词,标点符号和非字母字符都被认为是一个单词

# 屏幕滚动
- Ctrl + d 向下滚动半个屏幕
- Ctrl + u 向上股东半个屏幕

进入编辑模式,退出 ESC

1
2
3
4
5
6
1. i: insert 在光标前面进入插入模式
2. a: append 在光标的后面进入编辑模式
3. o: open line 在光标所在行的下面插入新行并进入编辑模式
4. I: 在行首插入进入编辑模式
5. A: 在行末进入编辑模式
6. O: 在上面插入行并进入编辑模式

删除,复制,粘帖,修改

1
2
3
4
5
6
7
8
9
10
11
12
1.   dw      delete wordu删除一个单词
2. dd 删除一行 , d0: 从光标的前一个字符删除到行首, d$: 从光标处删除到行尾
3. 3dd 删除 3 行
4. yy 复制一行
5. 3yy 复制 3 行
6. p 粘帖已经复制或删除的文本
7. x 删除一个字符 xn: 向右删除n个字符
8. r 替换当前字符
9. 3dw 删除3 个单词
10. 3yw 复制3 个单词
9. :s/<old>/<new>/g 将当前行中的<old>替换成<new>
10.:%s/<old>/<new>/g 将整个文档中的<old>替换成<new>

搜索

1
2
3
1. :/string      从当前位置向后查找 string
2. :?string 从当前位置向前查找 string
3. 搜索回撤后按 "n" 移动到下一个搜索到的字符串

替换

1
2
3
4
5
6
7
8
9
10
11
12
13
# 行内替换
:s/old/new 用字符串new 替换old, 替换当前行内的第一个
:ns/old/new 替换行内的第n个

:s/old/new/g 用字符串new 替换old,替换当前行内全部
:ns/old/new/g 替换指定的第n行

:m,ns/old/new/g 替换从第m行到n行内的所有字符串
:.,$/old/new/g 替换从当前行到末尾的所有字符串 ".":代表当前行, "$":代表最后一行

# 全文替换
:%s/old/new/g 替换文件内的所有字符串
:%s/old/new/gc 替换文件内的所有字符串,替换时需要用户确认.

查找配对的括号

1
2
3
# 用 "%" 差摘
1. 将光标移动到要查找的括号处
2. 按 "%"

保存退出

1
2
3
4
5
1.  :q              退出VIM 编辑器
2. :q! 不保存强制退出
3. :w 只保存文件不退出
4. :wq 保存文件并退出
5. :w filename 另存为filename

其他常用操作

1
2
3
4
5
6
7
1. :help            启动帮助   :q 推出帮助
2. :%d 清空文件内容
3. :set nu 显示行号
4. :set nonu 取消行号
5. :set ai 开启自动缩进
6. :set noai 关闭自动缩进
7. :start,endd 删除从start行开始到end行. 如:2,11d 删除2~11行

编辑文件

1
2
3
4
5
6
7
8
9
10
vim filename

# 同时编辑多个文件
vim file1 file2

# 多个文件之间切换
:n

# 插入文件内容
:r file file为要插入的文件名称

重复命令

1
Normal 模式下: 按 "." 即可重复上次的命令

执行外部命令

1
2
:!command       暂时离开vim去命令行执行command命令,如:!ls

插入补全

1
2
3
4
5
6
# 补全单词.这个单词是已经在本文件内出现过,输入该单词的首字母后即可使用
Ctrl + p 向上搜索,补全一个单词
Ctrl + n 向下搜索,补全一个单词

# 补全一行,这个行内容已经出现过
Ctrl+x Ctrl+l: 补全一行

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
vim .vimrc

# 常规设定
yntax on " 开启语法高亮

" encoding------------------------
set encoding=utf-8 " 打开文件时编码格式
" vim会根据该设置识别文件编码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set fileformat=unix " 设置以unix的格式保存文件"
set fileencoding=utf-8 " 在保存文件时,指定编码
set termencoding=utf-8 " 终端环境告诉vim使用编码
set ffs=unix,dos,mac " 在创建文件或写入时,这三种文件格式分别决定了行末要添加什么特殊字符,而在读入文件时,又分别决定了要从行末移去什么特殊字符。
set formatoptions+=m
set formatoptions+=B

" 主题------------------------------
set background=dark " 配色主题的色系,注意,这不是什么背景色!dark 是暗色系,light 是亮色系。
colorscheme desert " 配色主题的名称,:coloscheme 后键入<tab>可以自动补全 比较喜欢的desert,peachpuff,torte,elfload,slate

" show------------------------------
set number " 显示行号
set ruler " 显示当前光标行号和列
set wrap " 设置折行 set nowrap 为不折行
set sidescroll=1 " 默认设置=0之下,当光标到达屏幕边缘时,将自动扩展显示1/2屏幕的文本。通过使用=1设置,可以实现更加平滑的逐个字符扩展显示。
set showcmd " 在屏幕右下角显示未完成的命令
set showmode " 显示当前vim模式
set showmatc " 显示匹配的括号
set matchtime=1 " 设置showmatch的效果时间,默认500ms,现在是100ms
set cursorline " 突出显示当前行
set cursorcolumn " 突出显示当前列
set colorcolumn=80 " 设置某一列高亮

" search
set smartcase "搜索时,如果输入大写,则严格按照大小写搜索,如果小写,并设置了ignorecase,则忽略大小写
set ignorecase "搜索时忽略大小写"
set incsearc "搜索时及时匹配搜索内容,需要回车确认
set hlsearch "高亮搜索项"

" tab------------------------------
set expandtab "将<tab>符号转变为<space>空格
set smarttab "配合shiftwidth使用

" indent-----------------------------
set autoindent "换行自动缩进
set smartindent "缩进采用c语言风格
set shiftround "在一般模式下键入>>整个缩进shiftwidth的长度,<<反向操作,== 可以与上一行对齐,插入模式下C-T和C-D也可以左右启动
set shiftwidth=4 "缩进的空格数
set tabstop=4 "键入<tab>的步长
set softtabstop=4 "insert mode tab and backspace use 4 spaces

" set mark column color------------------
hi! link SignColumn LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange

" status line--------------------------
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
set laststatus=2 " 底部显示两行状态栏"

" select & complete---------------------
set selection=inclusive "选择文本事,光标所在位置也会被选中
set selectmode=key
" set selectmode=mouse,key
set scrolloff=5 "距离顶部和底部5行"
set backspace=2 "任何情况允许使用退格键删除
set mouse=a "启用鼠标"

" 代码折叠---------------------------
set foldlevelstart=99 "默认不折叠"
set foldmethod=indent "按照缩紧折叠"

" filetype---------------------------
filetype on " 开启文件类型检测
filetype plugin on " 开启插件的支持
filetype indent on " 开启文件类型相应的缩进规则

# 安装插件部分
" plug 插件的安装
call plug#begin()

" Any valid git URL is allowed---------------------------
Plug 'https://github.com/junegunn/vim-github-dashboard.git'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'

" On-demand loading
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

" Using a non-default branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }

" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plug options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" 在vim打开文件的时候 侧边展示目前等,该插件是必装插件 如果你用vim作为ide的话
Plug 'mhinz/vim-startify'
Plug 'scrooloose/nerdtree'

" 这个插件是快速搜索文件的 也是必须安装的,比 ctrlp 速度要快
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" 添加一些分割线 比如你写python的时候, 格式对齐 就可以通过这个分割线来
Plug 'Yggdroot/indentLine'

" 自动格式化管理插件, 可根据不同文件类型使用不同的格式化工具
Plug 'Chiel92/vim-autoformat'

" Markdown预览
Plug 'iamcco/markdown-preview.nvim', {'do': 'cd app & yarn install'}

"YCM
Plug 'Valloric/YouCompleteMe'

"状态栏美化
Plug 'Lokaltog/vim-powerline'

"缩进线
Plug 'Yggdroot/indentLine'

"自动补全括号和引号
Plug 'jiangmiao/auto-pairs'

"自动格式化工具.安装完毕后在Normal模式下输入Autopep8或者按F8即可执行
Plug 'tell-k/vim-autopep8'

"Markdown数学公式的支持
Plug 'iamcco/mathjax-support-for-mkdp'

"自动生成代码块
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'

"使用tab补全
Plug 'vim-scripts/SuperTab'

" 可以在 vim 中自动完成
Plug 'Shougo/neocomplete.vim'
call plug#end()