Vim 使用教程分享

发布于 2024-05-08 12:47:55 字数 11111 浏览 29 评论 0

1. Vim Command

Table 1: Vim Keyboard
CommandDescription
插入命令 
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=GFormart 格式化
: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

  1. 查看当前主题
    :color 
    :colorscheme 
    
  2. 查看 vim 运行目录
    :echo $VIMRUNTIME 
    
  3. 查看 colors 目录
    $ ls /usr/share/vim/vim80 
    
  4. 设置颜色主题,查看效果
    :colorscheme [space] [Ctrl+d]
    :colorscheme elflord 
    
  5. 修改颜色主题
    // 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)为灰色; 渐进搜索的前景色为黑色,背景色为黄色;光标处的字符加下划线。

  6. 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

  1. Install vundle
    $ git clone   https://github.com/VundleVim/Vundle.vim.git   ~/.vim/bundle/Vundle.vim
    
  2. 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
    
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

忱杏

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

烙印

文章 0 评论 0

singlesman

文章 0 评论 0

独孤求败

文章 0 评论 0

晨钟暮鼓

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文