Vim - 一些实用技巧

快速上手Vim

  1. 基于vimtutor命令教程
  2. 参考https://learnxinyminutes.com/docs/zh-cn/vim-cn/
  3. 鸟哥私房菜vim使用

1. vimrm配置

1.1. 缩进配置

syntax enable
filetype plugin indent on
set tabstop=4       " Size of a hard tabstop (ts)
set shiftwidth=4    " Size of an indentation (sw)
set expandtab       " Always uses spaces instead of tab characters (et)
set softtabstop=4   " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
set autoindent      " Copy indent from current line when starting a new line.
set smarttab        " Inserts blanks on a <Tab> key (as per sw, ts and sts).
set hls

1.2. 中文说明

" 示例 ~/.vimrc
" 2015.10 

" 需要 Vim iMproved 版本
set nocompatible

" 根据文件名检测文件类型,以便能进行智能自动缩进等操作。
filetype indent plugin on

" 开启语法高亮
syntax on

" 更好的命令行补全
set wildmenu

" 除了当使用大写字母时使用大小写无关查找
set ignorecase
set smartcase

" 当新开一行时,如果没有开启文件特定的缩进规则,
" 则缩进保持与你当前行一致
set autoindent

" 在左侧显示行号
set number

" 缩进选项,根据个人偏好进行修改

" 每个 TAB 的可视空格数
set tabstop=4

" 编辑时 TAB 对应的空格数
set softtabstop=4

" 当使用缩进操作 (>> 和 <<) 时缩进的空格数
set shiftwidth=4

" 将 TAB 转换成空格
set expandtab

" 为缩进和对齐开启智能化的 TAB 和空格切换功能
set smarttab

2. 查询检索操作

2.1. ‘%’ 匹配括号查找

输入%可以查找配对的括号 )、]、}

2.2. ‘%’ 搜索替换

  • 3,10s/old/new/g,3到10行搜索old替换成new
  • %s/old/new/gc%全文搜索替换,等价于 1,$s/old/new/gc,并提示是否替换(‘c’)

2.3. 搜索高亮设置

指令模式下输入 :set xxx 可以设置 xxx 选项。选项名可以用完整版本,也可以用缩略版本。一些有用的选项如下:

  • 'ic', 'ignorecase' 查找时忽略字母大小写
  • 'is', 'incsearch' 查找短语时显示部分匹配
  • 'hls', 'hlsearch' 高亮显示所有的匹配短语

在选项前加上 no 可以关闭选项::set noic

// 高亮
:set hls
:set hlsearch
// 取消高亮
:noh
:nohlsearch
// 快捷键
:nohlsearch<F10>

2.4. 忽略大小写搜索

  1. 要禁用忽略大小写,输入:set noic,切换回来输入set :ic
  2. 如果您想要仅在一次查找时忽略字母大小写,您可以在检索最后加上\c,比如/ignore\c <回车>

3. 变换操作

3.1. gu/gU大小写转换

  1. crtl+V,块选中内容后,gU:切换成大写,gu:切换成小写
  2. 单个字符的处理:
    • ~:切换光标所在位置的字符的大小写形式,大写转换为小写,小写转换为大写
    • n~:将光标位置开始的n个字符改变其大小写(非字母的不做处理)
  3. 文本整体的处理,gu:切换为小写,gU:切换为大写,剩下的就是对这两个命令的限定(限定行字母和单词)等等。 比如:
    • gU0 :从光标所在位置到行首,都变为大写
    • gu$:从当前指标到行位转小写
    • guG: 从当前行到最尾行转小写
    • ggguG:整篇文章转换为小写

4. 缩进

  1. 普通模式下支持>><<或者在显示模式下,可以利用<>进行内容的缩进和退回
  2. 可以利用.或者N<重复操作或者一次缩进N个

5. 信息显示

  1. 信息显示:CTRL+G,还可以通过指令操作设置显示信息
  2. 行号显示:set nuset nonu
  3. 光标显示:set ruler

6. 多文档编辑

6.1. 直接编辑多个文件,:n/:N移动

  1. vim afile bfile
  2. 通过:files查下
  3. :n切换到下个文档,:N切换到上个文档
  4. afile中选择n行复制,nyy,通过:n到下个文件,通过p在指定位置粘贴上
  5. 全部保存退出:wqa或者:qa!

6.2. :sp 多窗口功能

  1. vim afile
  2. :sp bfile,如果想看同文件,直接键入:sp
  3. 选择窗口:
    • 按住ctrl+w,继续w键切换
    • 下移:先按下ctrl不放, 再按下w后放开所有的按键,然后再按下j(或向下箭头键),则光标可移动到下方的窗口。
    • 上移:同上,换成k或者向上箭头
    • 退出:ctrl+w,然后q 或者 :wq
  4. 垂直::vs bfile
  5. 参考:https://www.linux.com/tutorials/vim-tips-using-viewports/

7. ctrl+z和fg协作

  1. vim afile
  2. 通过crtl+z换到后台
  3. 做其他事项
  4. fg,继续回来编辑afile,如果有多个job,需要fg %n来弹出第n个vim任务(jobs查看任务清单)

8. 另存为以及选择区域另存为

  • :w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文件中。
  • v motion :w FILENAME 可将当前编辑文件中可视模式下选中的内容保存到文件FILENAME中。
  • :r !dir 可以读取 dir 命令的输出并将其放置到当前文件的光标位置后面。

diff比对

# vimdiff 帮助
vimdiff filea filen
vim -d filea fileb
]c : 下个不同处
[c : 上个不同处

---
:diffget
:diffput
:do : diff obtian
:dp : diff put
zo: 打开折叠部分

---
更多查看
:diff tab tab (比如 diffupdate, diff)
:help