blog-web/source/_posts/linux/vim学习手记(2).md
2019-03-31 00:46:04 +08:00

65 lines
2.0 KiB
Markdown

---
title: vim学习手记(2)
date: 2019-03-30 20:45:01
tags:
- linux
- vim
categories:
- linux
---
## 修改 查找 替换
<!-- more -->
### 大小写的转换
+ `~` - 转换当前光标所在的字符( 如果是小写就转为大写, 反之转为小写, 下同 )
+ `g~w` - 当前光标之后的一个单词转换大小写
这里同样是 操作+动作 的组合方式
比如`g~$`就是对当前位置到行尾进行大小写转换
`~`表示的是小写转大写, 大写转小写
如果要全部转大写, 就是`U`, 全部转小写, 就是`u`
比如`gU$`就表示从当前位置到行尾全部转大写
`gu$`就表示从当前位置到行尾全部转小写
> 按下`.`就是重复上一个修改操作
比如上一个操作是执行了**g~w**, 按下`.`就是再次执行转换单词的大小写
### 查找
`/{string}`是用于查找指定字符串
如果设置了**ignorecase** , 查找时会忽略大小写
如果设置了**hlsearch**, 会同时高亮所有匹配的位置
之后按`Enter`再按`n`, 就可以将光标切换到下一个匹配的位置
`N`是切换到上一个匹配的位置
![查找](/images/linux/vim-search.png)
### 替换(substitute)
替换需要使用命令模式执行, 也就是先输入`:`
格式统一为`[range]s/from/to/[flags]`
range是搜索范围
+ `1,10` - 表示1到10行
+ `10` - 只有第10行
+ `%` - 所有整篇文档
+ `10,$` - 从第10行到文档末尾
flags是替换方式的标识
+ `c` confirm 每次替换都询问
+ `e` error 不显示错误
+ `g` global 在当前指定的范围内全局替换
+ `i` ignore case 忽略大小写
+ **s/str1/str2/g** - 将当前行中的str1替换为str2
+ **%s/str1/str2/g** - 将整篇文档所有的str1替换为str2
> **from**的位置是可以使用正则表达式的
与通用的正则元字符基本相同, 但是大部分要加`\`转义
比如`\d+`在通用的正则结构当中表示匹配至少1个的数字
在vim当中要写作`\d\+`
除了[]不需要, `\d\+`同样可以写作`[0-9]\+`