1049-优雅玩转Vim

https://www.imooc.com/learn/1049

简介:Vim作为Linux 平台首选编辑器,无论是运维还是开发等IT人员都应该系统地学习下这款优秀经典的上古神器。本课程系统提炼vim 的精华、通过抛砖引玉把它展现到你的面前,更能让你的工作如虎添翼、事半功倍。

第1章 课程介绍

Vim课程介绍。

1-1 课程简介 (04:34)

在所有的类Unix操作系统中都会默认内置Vi/Vim文本编辑器

  1. Vim简介

    • Vim和Vi的区别
    • Vimrc配置
    • Vim四种模式
  2. 基础入门

    • Vim寄存器(类似于Windows的粘贴板)
    • 增查删改等常规操作(快捷键、按键)
    • Vim组合规律
  3. 高级功能

    • 缓冲区与多文件编辑
    • 多窗口与标签分组
    • 文本对象和宏
    • Visual模式

第2章 Vim简介

为什么选择Vim作为编辑器,Vim安装与简洁Vimrc配置

2-1 vim介绍及Vimrc (18:02)

Vim介绍:

  • Vim是一个Unix以及类Unix文本编辑器
  • 特点:功能强大、高度可定制(Vimrc、插件等)

Vim vs Vi:

Vim = Vi + IMproved

  • 多级撤销
  • 语法加亮和自动补全
  • 支持多种插件
  • 通过网络协议(HTTP/SSH)编辑文件
  • 多文件编辑
  • Vim可以编辑压缩格式文件(gzip、zip等)

Vimrc概述:

  • rc = run command
  • 系统级vimrc和用户级vimrc
  • 每一行作为一个命令执行

Vimrc使用:

默认.Vimrc是没有得。需要用户自己手动创建。Vim 会自动搜索到。

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"                                 Sample vimrc                                 "
"                                                                              "
"                                 Provided by:                                 "
"                                     Tuyk                                     "
"                                                                              "
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

syntax on " 自动语法高亮

" Save 1,000 items in history " 设置历史行号
set history=1000

" Show the line and column number of the cursor position " 设置光标的位置值
set ruler

" Display the incomplete commands in the bottom right-hand side of your screen.  
set showcmd

" Display completion matches on your status line
set wildmenu

" Show a few lines of context around the cursor
set scrolloff=5

" Highlight search matches " 设置查找的值高亮显示
set hlsearch

" Enable incremental searching " 设置边搜索边高亮
set incsearch

" Ignore case when searching " 设置忽略查找选项的大小写
set ignorecase

" Override the 'ignorecase' option if the search pattern contains upper case characters.
set smartcase

" Turn on line numbering " 显示行号
set number

" Turn on file backups
set backup

" Don't line wrap mid-word.
set lbr

" Copy the indentation from the current line. " 设置自动复制上一行的缩进到下一行
set autoindent

" Enable smart autoindenting. " 设置自动识别“{}”缩进,写代码非常有用
set smartindent

" Use spaces instead of tabs " 使用空格替换tab
set expandtab

" Enable smart tabs
set smarttab

" Make a tab equal to 4 spaces
set shiftwidth=4 " 默认缩进4个空格
set tabstop=4 " tab 代表4个空格
set softtabstop=4 " 使用tab时 tab空格数

" Specifiy a color scheme.
colorscheme slate

" Tell vim what background you are using " 设置背景颜色
" set bg=light
" set bg=dark


" Map Y to act like D and C, i.e. yank until EOL, rather than act like yy " Map 映射
" map Y y$

" Remap VIM 0 to first non-blank character
" map 0 ^

" Easily create HTML unorded lists. 
" map <F3> i<ul><CR><Space><Space><li></li><CR><Esc>I</ul><Esc>kcit
" map <F4> <Esc>o<li></li><Esc>cit

" change the mapleader from \ to ,
" NOTE: This has to be set before <leader> is used.
" let mapleader=","

" Quickly save your file.
" map <leader>w :w!<cr>

" For more options see ":help option-list" and ":options".

2-2 vim的四种模式 (05:22)

  1. 普通模式
    • 打开的默认模式
    • 移查删改
  2. 可视化模式
    • 对一块区域操作
  3. 插入模式
    • 添加文本
  4. 命令模式
    • 和普通模式类似

v:进入可视化模式

i:进入插入模式

::使用命令模式

dd:删除

Esc:返回普通模式

:h vim-modes-intro:查看vim模式文档(7种)

第3章 Vim基础入门

本章主要讲解移动、跳转与缩进,删除、复制与粘贴,修改、查找与替换相关内容。

3-1 移动、跳转与缩进 (07:55)

Vim布局起源

  • Vim最初的作者Bill Joy使用的机器ADM-3A终端机

    ADM-3A终端机

    注意看上下左右键的位置

光标移动:

快捷键 说明
h 左移
l 右移
j 下移
k 上移
shift+6/0 移动到行首^/包含缩进空格
shift+4 移动到行尾$

单词和字符移动:

快捷键 说明
w/W 正向移动到下一个单词开头(小写识别特殊字符)
e/E 正向移动到下一个单词结尾
b/B 反向移动到上一个单词开头
ge 反向移动到上一个单词结尾
单词和字符移动

跳转:

快捷键 说明
control+b/B 上一页
control+f/F 下一页
control+u/d 向上/下翻半页
gg 跳转到文件📁首行
G 跳转到文件📁尾行
<line_number>gg/G 跳转到指定行
{g}+control+g/G 查看文件信息/{g}更加详细

缩进:

快捷键 说明
>>===:> 右缩进(普通模式)
<<===:< 左缩进(普通模式)
:m,n>===:m>(n-m+1) m到n行缩进(命令行模式)
:m>n===:m,m+n-1> m行开始,共n行缩进一次(命令行模式)

3-2 删除、复制与粘贴 (25:41)

Windows Vim 不同处
cut delete 和剪切相同,而不是直接删除
copy yank 等同于复制,由于c用于(change)被迫选了yank
paste put 粘贴完全相同

Vim特性

  • 寄存器(保存临时数据)

    类型 含义 表示方式 举例 特点
    无名寄存器 默认寄存器 “” “” p=p 会被最后一条覆盖
    数字寄存器 “+{0-9}缓存最近10次操作 “0”{1-9} “0P
    “1P
    0用于复制专用
    1-9用于最近9次行删除或者修改记录
    有名寄存器 26英文字母命名有名寄存器 “[a-z]/[A-Z]” “ayw “A会通过^J追加到”a寄存器中
    黑洞寄存器 有去无回 “- “_dw 只想删除而不想覆盖无名寄存器

    :register/:reg:进入寄存器

    :h reg:查看寄存器文档

基础操作

按键操作 定义
d = delete = cut 剪切
y = yank ≈ copy 类似于复制
P/p = put ≈ paste 粘贴到光标后/前
u = undo 撤销之前操作
Control+r = redo 重做/恢复之前操作(反撤销)

yy:复制整行。记录到""默认寄存器/无名寄存器、"0寄存器/复制专用寄存器

dd:剪切整行。记录到""默认寄存器/无名寄存器、"1寄存器/剪切寄存器

p:粘贴

u:撤销

Control+r:重做(反撤销)

"ayy:复制整行到"a寄存器。记录到默认寄存器,不会记录到复制专用寄存器

"_dd:删除整行。不会记录到任何寄存器。黑洞寄存器

按键操作 定义
yw 复制当前光标单词(从光标后开始截取)
y2w 复制正向倆个单词(从光标后开始截取)

调换字符

按键操作 缓冲区内容
{start} Practical vim
F{space} Practical vim
x Practical vim
p Practical vim

x:剪切单个字符。记录到默认寄存器、-寄存器

行剪切粘贴

按键操作 缓冲区内容
{start} Line1 Line2
dd Line2
p Line2 Line1

行复制

按键操作 缓冲区内容
{start} Line1 Line2
yy Line1 Line2
p Line1 Line2 Line1

组合删除([count] operation [count] {motion})

操作按键 定义
x/X 删除光标下/前单个字符
dw(d = delete,w = word) 删除一个单词(必须在词首👋)(删除光标处到单词末尾🔚)
d{hjkl} 删除到上下左右一个操作前的字符
d$===D 删除光标到行尾的字符
d^ 删除光标到行首的字符
dd 删除当前整行
{n}dd 向下删除n行(包括当前行)
5dw 删除正向单词5次
d3w 正向删除3w 动作
3w 正向移动单词3次
2d3w 正向删除3w 动作 2次

3-3 修改、查找与替换 (15:59)

插入

按键操作 定义
Shift+i/Shift+a 插入模式并移动到行首/尾
i/a 光标前/后插入
[n]+O/o 行前/后插入n次
[n]+i 插入模式重复n次

转换

按键操作 定义
~ 单个字符大小写转换
g ~ w 单词大小写转换
g ~ $/g ~ ~ 整行大小写转换(^光标处到行首大小写反转,$光标处到行尾大小写反转)
gUw/guw 单词转换成大小写

.:对上一个操作的重🐛复

查找

按键操作 定义
f{char}/F{char} 正向/反向查找某个单词(适用于查找某一行)
t{char} 查找字符前一个字符
dt{char}/df{char} 删除光标到查找字符间的字符
/{char} 命令行查找

/{char}

  • n:向下⬇️查找🔎
  • N:向上⬆️查找🔎

替换(substitute)

语法:[range]s[ubstitute]/{pattern}/{string}/[flags]

按键操作 定义
:s/going/rolling/g 当前行所有going替换成rolling
:%s/going/rolling/g %匹配所有范围
⇧+r/R 替换模式
r 单个字符替换
cwc2w 修改单个单词
c$/C类似于d操作符 修改光标之后行内内容

第4章 Vim高级功能

本章主要讲解缓冲区与多文件编辑、多窗口操作(分屏)与标签分组、宏和文本对象以及Visual模式。

4-1 缓冲区与多文件编辑 (13:25)

缓冲区、标签、窗口

缓冲区与多文件编辑

编辑操作并不是真正的编辑文件,而是编辑文件在内存中的映射或快照或缓冲区

缓冲区:就是内容缓存区域。

  • Buffer是内存中的一块缓冲区,用于临时存放Vim打开过的文件

查看缓冲区列表:

  • :files
  • :buffers
  • :ls缓冲区列表

缓冲区列表指示状态

标记 含义
a 激活缓冲区,缓冲区被加载且显示
h 隐藏缓冲区,缓冲区被加载但🥚不显示
% 当前缓冲区
# 交换缓冲区
= 只读缓冲区
+ 已经更改缓冲区
- 不可更改缓冲区,’modifiable’选项不置位

缓冲区列表操作

指令 含义
:bp[revious] 上一个缓冲区
:bn[ext] 下一个缓冲区
:bf[irst] 到第一个缓冲区
:bl[ast] 到最后一个缓冲区
:buffer Number/File_name 指定缓冲区
:ball 编辑所有缓冲区
⌃+^/b# 切换到前一个buffer(交换buffer)
:qall! 退出全部缓冲区
:wall! 写入全部缓冲区
:badd 添加一个新缓冲区,但不设置为当前缓冲区
:bd[elete] 删除缓冲区
:m,nbd/:%db 删除m到n编号/所有的缓冲区文件
:bufdo {CMD} bufdo set number
:E /:bd 打开文件目录列表/返回到🔙最初的buffer

4-2 多窗口操作与标签分组 (16:57)

  • 多窗口(分屏)

分屏操作

指令 含义
vim -On/vim -on 垂直/水平分屏(n:数字,o:Open)
⌃+w c/q 关闭当前窗口/最后一个窗口时退
⌃+w s 上下分割当前打开的文件
⌃+w v 左右分割当前打开的文件
:sp filename 上下分割并打开一个新的文件
:vsp filename 左右分割并打开一个新的文件

移动分屏和尺寸变动

指令 含义
⌃+w H 向左⬅️移动
⌃+w J 向下⬇️移动
⌃+w K 向上⬆️移动
⌃+w L 向右➡️移动
⌃+w + 增加高度
⌃+w - 减少高度
⌃+w _ 减小到最低高度
⌃+w = 让所有屏的高度一致
  • 标签

    标签就是容纳一系列窗口的容器

标签操作

指令 含义
:tabnew [tab_name] 新建标签页
:tabfind 查找并在新标签中打开文件
:tabs 显示已打开标签页的列表
:tabclose 关闭当前标签页
:tabonly 仅保留当前标签页打开
:tabn/p/first/last 跳转到下/上/第一/最后一个标签页
:tabm 将当前标签页放置到指定位置

标签操作和命令键

指令 含义
gt/T 移动到下/上一个标签
{i}gt 跳转到i位置的标签
noremap <C-L> <Esc> :tabnext <CR> Vimrc中自定义快捷键
noremap <C-H> <Esc> :tabprevious <CR> Vimrc中自定义快捷键
:tabe 编辑标签中的某个文件
:tabm 0/tabm 移动当前tab到第一个/最后一个
t:abm {i} 移动当前tab到第i+1位置

4-3 文本对象与宏 (18:40)

  • 文本对象
{operator} {a} {object}
{operator} {i} {object}

例:

  • daw = Delete A Word

    ==a==n object:包含尾部间隔空格

  • ciw = Change Inner Word

    ==i==nner object:只是内容本身,不包含尾部单词间隔🈳️格

Word/Sentence/Paragraph

textobject 说明
w word
s sentence
p paragraph

块对象

textobject 说明
]/[ [] block
)/(、b () block
>/<、>/< <> block
}/{、B () block
t tag block: <> </>

Visual mode

指令 说明
viw 选中单词
vis 选中句子🍊
vip 选中段落
vi( 选中()圆括号中的内容
vi[ 选中[]中括号中的内容
vit 选中标签中的内容
·
指令 说明
v2i{ 选中两层`{}`大括号之间的所有内容
数字限制选择的嵌套层数
v3aw 选择3⃣️个单词(3个单词➕2个间隔空格)
v3iw 选择3⃣️个单词(2个单词➕1个间隔空格)
可将v选择操作指令替换为c(change), x, d(delete), y(yank)等操作符(operator),来针对文本对象操作

If you write a thing once, it is okay. However if you’re writing twice or more times, then you should find a better way to do it.

Vim的Micro就是用来解决重复的问题

宏就是批处理,类似于命令行脚本或者编程中的函数

h: operator:查看操作符文档

简单操作

指令 说明
qa 开始录制⏺️宏到寄存器a🀄️
qA 追加宏,在寄存器a🀄️追加
n@a 执行n遍a寄存器中的操作
@@ 再执行一遍上一次操作
:n,mnormal @a n到m行执行寄存器a宏操作
:let @a= ' 编辑宏a寄存器

宏最佳操作

  • 规范光标位置:0
  • 执行编辑和操作
  • 移动光标到容易回放的位置:j

Ctrl+a:当前数字递增1

示例步骤:

  1. 循环递增插入数字

    # 添加数字1
    i
    1
    Esc
    
    # 开始录制宏,此时光标在数字1行
    qa # 开始
    yy # 复制
    p # 粘贴
    q # 结束
    
    # 执行宏操作
    10@a
  2. 为多行添加注释

    # 开始录制宏,此时光标在需注释行首
    qb # 开始
    i # 进入编辑模式
    `# ` # 添加注释
    Esc # 退出编辑模式
    ^ # 移动到行首
    j # 光标下行移动
    q # 结束

宏保存

  • viminfo/vimrc file
  • 保存历史和非空寄存器
  • vim启动时读取
  • 容易被覆盖

4-4 Visual 模式 (15:51)

在可视化模式下,可以对一个文本块的整体进行操作

三种子模式

指令 说明
v 激活面向字符的可视化模式
V/shift+v 激活面向行的可视化模式
command+v 激活面向列块的可视化模式

字符可视化模式=>行可视化模式=>块可视化模式

可视化模式操作

操作符 说明
gv 重选上次的高亮选区
o 切换选取边界

第5章 课程总结

课程总结

5-1 课程总结 (03:18)

  1. Vim模式(四种)

    普通模式、编辑模式、可视化模式、命令行模式

  2. Vim组合 {operation}{motion}

    增查删改

  3. Vim配置多样性

    配置文件.vimrc、Vim插件

  4. Vim视图多样性

    缓冲区、多文件编辑、多窗口、标签分组


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com

文章标题:1049-优雅玩转Vim

文章字数:4.2k

本文作者:神秘的小岛岛

发布时间:2019-11-04, 22:34:45

最后更新:2019-11-05, 16:21:47

原始链接:https://www.tuyrk.cn/imooc/1049-vim/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏