vim实用技巧学习笔记2-插入模式、可视模式、命令行模式
閱讀時間:全文 1010 字,預估用時 6 分鐘
創作日期:2018-02-21
上篇文章:Hexo源码阅读
BEGIN
插入模式(insert-mode)
插入模式下的说明及技巧
- 插入模式下可执行部分命令以提高效率
- 插入-普通模式: 插入模式下执行命令后回到原来位置继续输入.
按键操作 | 用途 |
---|---|
<C-h> | 删除前一个字符 |
<C-w> | 删除前一个单词 |
<C-u> | 删除至行首 |
<Esc> | 切换到普通模式 |
<C-[> | 切换到普通模式 |
<C-o> | 切换到插入-普通模式 |
寄存器的简单使用
- (jq15)黏贴寄存器中的文本:
<C-r>0
- (jq16)利用表达式寄存器做运算:
<C-r>=
输入特殊字符
键值 | 含义 |
---|---|
<C-v>{digit} | 以十进制字符编码插入字符 |
<C-v>u{digit} | 以十六进制字符编码插入字符 |
<C-v>{notdigit} | 按原意插入非数字字符 |
<C-k>{char1}{char2} | 插入以二合字母表示的字符 |
<C-v>
使用文档::h i_CTRL-V_digit
ga
命令查看字符的编码值- 查看二合字符对应表:
:h digraph-table
可视模式(visual-mode)
键值 | 含义 |
---|---|
v | 激活面向字符的可视模式 |
V | 激活面向行的可视模式 |
<C-v> | 激活面向块的可视模式 |
gv | 重选上次的高亮选区 |
o | 切换高亮选区的活动端 |
命令行模式(ex-mode)
操作及含义:
:{start},{end}{command}
- 公用操作符及含义
操作符 | 含义 |
---|---|
% | 全文 |
. | 光标所在行 |
$ | 文件的最后一行 |
0 | 虚拟行,表示第一行的上一行 |
\ m` | 包含位置标记m的行 |
'< | 高亮选区的开始行 |
'> | 高亮选区的结束行 |
@: | 重复上一次ex命令 |
@@ | 重复执行@: 命令 |
print及相似命令的使用
命令(command)及含义
命令 | 简写 | 对应普通模式 | 含义 |
---|---|---|---|
p | - | 打印 | |
delete | d | dd | 删除 |
join | j | J | 多行合并一行 |
substitute | s | - | 用于替换文本,如:%s/xxx/yyy/g |
normal | norm | {start},{end}normal command | 对多行执行普通模式命令 |
操作 | 含义 |
---|---|
:1,3p | 打印1至3行 |
:.,$p | 打印光标所在行到结束行 |
:1+,1+5p | 打印2至6行 |
:%p | 打印全文 |
:/<html>/,/<\/html>/p | 打印光标所在行之后匹配到的内容 |
copy和move的使用
命令(command)及含义
命令 | 简写 | 对应普通模式 | 含义 |
---|---|---|---|
copy | t | yy | 复制文本 |
move | m | ddp | 移动文本 |
操作 | 含义 |
---|---|
{start},{end}t{target} | 将指定行文本复制到target行下面 |
:6t. | 将第6行复制到光标行下面 |
:t6 | 将当前行复制到第6行下面 |
:t. | 为当前行创建一个副本,相当于普通模式的yyp |
:t$ | 复制当前行到文本结尾 |
'<,'>t0 | 将选择的行复制到文本开头 |
ex命令补全
tab按键用于补全命令,
若vim的默认补全方式不喜欢可以选择如下设置:
- bash shell的补全方式:
set wildmode=longest,list
- zsh的补全方式:
set wildmenu
set wildmode=full
ex技巧
- 将光标所在单词复制到命令行:
<C-r><C-w>
- 将光标所在行复制到命令行:
<C-r><C-a>
命令行窗口
命令 | 动作 |
---|---|
q/ | 打开历史查找命令的命令行窗口 |
q: | 打开历史ex命令的命令行窗口 |
<Ctrl-f> | 从命令行模式切换到命令行窗口 |
执行shell命令
在vim命令行中执行shell命令, 其中[range]
指{start},{end}
:
- 命令行中执行:
:!{cmd}
- 进入shell窗口:
:shell
可以用<Ctrl-z>
将运行中的程序存入后台,fg
命令继续前台运行,jobs
命令查看在后台的所有程序 :read !{cmd}
: 在shell中执行{cmd},并把其标准输出插入光标下方:[range]write !{cmd}
: 在shell中执行{cmd},以[range]作为其标准输入:[range]!{filter}
: 使用外部程序{filter}过滤指定的[range]- 将多条ex命令放入文件中,然后通过
:source filename.vim
运行每条ex命令 - 多文件运行vim脚本: 当缓存区有多个文件时执行
:argdo source filename.vim
示例
将下方文本通过last name进行排序
# 执行前
first name,last name,email
john,smith,john@example.com
drew,neil,drew@vimcasts.org
jane,doe,jane@example.com
执行命令: :3,$!sort -t',' -k2
, 其中2,$
表示第2行到最后一行, sort为shell命令, -t','
指定分割符, -k2
指定用以排序的文本
# 执行后
first name,last name,email
jane,doe,jane@example.com
drew,neil,drew@vimcasts.org
john,smith,john@example.com
FINISH
上篇文章:Hexo源码阅读