Vim 使用教程分享
1. Vim Command
Command | Description |
---|---|
插入命令 | |
a | 在光标所在字符后插入 |
A | 在光标所在行行尾插入 |
i | 在光标所在字符前插入 |
I | 在光标所在行行首插入 |
o | 在光标下插入新行 |
O | 在光标上插入新行 |
定位命令 | |
\$ | 光标移到行尾 |
\^ | 光标移到行首 |
gg | 到第一行 |
G | 到最后一行 |
nG or :n | 到第 n 行 |
删除命令 | |
x | 删除光标位置字符 |
nx | 删除光标位置后的 n 个字符 |
dd | 删除光标所在行,ndd 删除 n 行 |
dG | 删除光标所在位置到文件末尾内容 |
D | 删除光标所在位置到行尾内容 |
:n1,n2d | 删除指定范围的行,如:999,1003d |
保存命令 | |
:w | 保存修改 |
:w | 另存为指定文件 |
:wq | 保存修改并退出 |
ZZ | 保存退出快捷键 |
:q! | 不保存退出 |
:wq! | 保存修改并退出(文件所有者及 root 可使用) |
常用操作 | |
选择 | 按 v,进入可视模式,移动光标选定内容 |
复制 | 一般选定后,按 y(yank)即可复制,常用命令如下: |
yy 复制整行(nyy 或者 yny ,复制 n 行,n 为数字) | |
y^ 复制当前到行头的内容 | |
y$ 复制当前到行尾的内容 | |
yw 复制一个 word (nyw 或者 ynw,复制 n 个 word,n 为数字) | |
yG 复制至档尾(nyG 或者 ynG,复制到第 n 行,例如 1yG 或者 y1G,复制到档尾) | |
剪切 | 按 d(delete)剪切,基本和复制命令一样。常用命令如下: |
d 剪切选定块到缓冲区; | |
dd 剪切整行,ndd 剪切当前行以下 n 行。 | |
d^ 剪切至行首 | |
d$ 剪切至行尾 | |
dw 剪切一个 word | |
粘贴 | 按 p(put),粘贴在当前光标所在行下面 |
按 P,粘贴在当前光标所在行上面 | |
整行的复制粘贴在游标的上(下)一行;非整行的复制则是粘贴在游标的前(后) | |
撤销(undo) | u,(阅读模式下按 U,撤销上一步的操作) |
恢复(redo) | Ctrl+r |
搜索 | 查找(normal 模式下) |
n/N,继续搜索下一处/上一处关键词 | |
:%s/oldString/newString/g,全文替换 | |
:n1,n2s/oldString/newString/g,在一定范围内替换指定字符串 | |
注意:查找回车应当用\n,而替换为回车应当用\r(相当于<CR>) | |
Vim 查找支持正则表达式,例如/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim\\(匹配"vim\)"。 | |
\c 表示大小写不敏感查找,\C 表示大小写敏感查找。 | |
*即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。 | |
例如当前为 foo, 可以匹配 foo bar 中的 foo,但不可匹配 foobar 中的 foo。 | |
g*即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即 foo bar 和 foobar 中的 foo 均可被匹配到。 | |
查找及替换 | :s(substitute), 查找和替换。语法如下: |
:{作用范围}s/{目标}/{替换}/{替换标志} | |
例如:%s/foo/bar/g 会在全局范围(%) 查找 foo 并替换为 bar,所有出现都会被替换(g)。 | |
1. 作用范围分为当前行、全文、选区等等。 | |
当前行::s/foo/bar/g。 | |
全文::%s/foo/bar/g。 | |
选区,在 Visual 模式下选择区域后输入:,Vim 即可自动补全为 :'<,'>::'<,'>s/foo/bar/g。 | |
2-11 行::5,12s/foo/bar/g | |
当前行.与接下来两行+2::.,+2s/foo/bar/g | |
2. 替换标志 | |
空替换标志表示只替换从光标位置开始,目标的第一次出现::%s/foo/bar | |
i 表示大小写不敏感查找,I 表示大小写敏感: | |
:%s/foo/bar/i | |
# 等效于模式中的\c(不敏感)或\C(敏感) | |
:%s/foo\c/bar | |
c 表示需要确认,例如全局查找"foo"替换为"bar"并且需要确认::%s/foo/bar/gc | |
设置命令 | |
:set nu! | 显示行号 |
:set nonu | 取消行号 |
:syntax on | 语法高亮度显示 |
:set ai! | 设置自动缩进 |
:set filetype indent on | 启用自动缩进选项 |
:set filetype=xml | 启用自动缩进选项 n |
:100 | 跳到指定行: |
:split | 分割视窗(可加名称随便开启另一档案) |
gg=G | Formart 格式化 |
:n/:N | 编辑多个文件时,下一个文件/上一个文件 |
注意事项 | 如果设置完成后,发现功能没有起作用,检查系统下是否安装了 vim-enhanced,命令为: $ rpm -q vim-enhanced |
小技巧 | |
:r ![命令] | 导入命令执行结果 |
:map | 快捷键 触发命令 |
定义快捷键,范例: | |
:map ^P I#<ESC> | |
:map ^B 0x | |
:map ^H zrg1390556487@gmail.com<ESC> //定义快捷键,插入邮箱 | |
:n1,n2s/^/#/g | 连续行注释 |
:n1,n2s/^#//g | 连续行注释 |
:n1,n2s/^/\/\//g | 连续行注释 |
:ab mymail zrg@gmail.com | 替换,输入 mymail,自动变成 zrg@gmail.com |
2. Vim Configuration
2.1. Set Theme
- 查看当前主题
:color :colorscheme
- 查看 vim 运行目录
:echo $VIMRUNTIME
- 查看 colors 目录
$ ls /usr/share/vim/vim80
- 设置颜色主题,查看效果
:colorscheme [space] [Ctrl+d] :colorscheme elflord
- 修改颜色主题
// Debian/Ubuntu $ vim /etc/vim/vimrc
// MacOS $ vim ~/.zshrc
然后,添加如下代码
# elfload 表示主题名称 colorscheme elflord
或者在 ~/.vimrc 中进行设置:
highlight Search ctermbg=yellow ctermfg=black highlight IncSearch ctermbg=black ctermfg=yellow highlight MatchParen cterm=underline ctermbg=NONE ctermfg=NONE
上述配置指定 Search 结果的前景色(foreground)为黑色,背景色(background)为灰色; 渐进搜索的前景色为黑色,背景色为黄色;光标处的字符加下划线。
- MacOS 修改主题
$ ls /usr/share/vim/vim81/ $ vim ~/.vimrc
colorscheme darkblue # 主题设置 syntax on # 打开语法高亮
2.2. Enable and Disable Highlight
// Disable :nohighlight 或 :nohl
// Only disable search highlight :set nohlsearch
// Re-enabled search hightlight on next search :set hlsearch
- 延时禁用
让 Vim 查找/替换后一段时间自动取消高亮,发生查找时自动开启呢?
1: " 当光标一段时间保持不动了,就禁用高亮 2: autocmd cursorhold * set nohlsearch 3: " 当输入查找命令时,再启用高亮 4: noremap n :set hlsearch<cr>n 5: noremap N :set hlsearch<cr>N 6: noremap / :set hlsearch<cr>/ 7: noremap ? :set hlsearch<cr>? 8: noremap * *:set hlsearch<cr>
- 一键禁用
设置快捷键来一键禁用/开启搜索高亮:
nnoremap <c-h> :call DisableHighlight()<cr> function! DisableHighlight() set nohlsearch endfunc
希望关闭高亮时只需要按下 Ctrl+H,当发生下次搜索时又会自动启用。
- 设置生效
Notice: 设置完成后,发现功能没有起作用,检查一下系统下是否安装了 vim-enhanced 包,查询命令为: $ rpm -q vim-enhanced
2.3. Install Plugin
- Install vundle
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- Configure vundle
$ vim ~/.vimrc
set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' " The following are examples of different formats supported. " Keep Plugin commands between vundle#begin/end. " plugin on GitHub repo Plugin 'tpope/vim-fugitive' " plugin from http://vim-scripts.org/vim/scripts.html " Plugin 'L9' " Git plugin not hosted on GitHub Plugin 'git://git.wincent.com/command-t.git' " git repos on your local machine (i.e. when working on your own plugin) Plugin 'file:///home/gmarik/path/to/plugin' " The sparkup vim script is in a subdirectory of this repo called vim. " Pass the path to set the runtimepath properly. Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} " Install L9 and avoid a Naming conflict if you've already installed a " different version somewhere else. " Plugin 'ascenator/L9', {'name': 'newL9'} " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required " To ignore plugin indent changes, instead use: "filetype plugin on " " Brief help " :PluginList - lists configured plugins " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate " :PluginSearch foo - searches for foo; append `!` to refresh local cache " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal " " see :h vundle for more details or wiki for FAQ " Put your non-Plugin stuff after this line
- Install Plugins
- Launch vim and run :PluginInstall
- To install from command line: vim +PluginInstall +qall
3. Problems
3.1. MacOS 下 backspace 键失效,不能向左删除
在默认状态下,delete(backspace)按下只会删除本次插入模式下插入的文本,这跟 backspace 的模式设置有关,其模式可以设置为以下三种模式:
- 0 same as “:set backspace=” (Vi compatible)
- 1 same as “:set backspace=indent,eol”
- 2 same as “:set backspace=indent,eol,start”
Solving:
$ vim ~/.vimrc " 解决插入模式下 delete/backspce 键失效问题 set backspace=2
4. References
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Ajax 应用详解
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论