0%

vim-skill

vim 使用积累

支持ts语法高亮

vim的版本是8.0,所以直接安装:

1
git clone https://github.com/leafgarland/typescript-vim.git ~/.vim/pack/typescript/start/typescript-vim

重新启动vim,ts就是高亮的~

搜索替换

搜索

在正常模式下,直接输入/会进入查找模式,然后输入需要查找的字符,比如需要查找:video,那么只需要在正常模式输入:/video,即可查找到当前文档下的所有video字符串。如果匹配到了,那么按n跳到下一个查找结果,按N跳到上一个。

但是我们如果需要同时查找videoVideo怎么办?我们需要的是不区分大小的查找,那么可以输入:/\Cvideo,这样就是不区分大小写的查找。

因为默认是区分大小写的,我们可以手动设置大小写区分不区分:

  1. \c 不区分大小写
  2. \C 区分大小写

上面这种设置只是对当前的一次查找的时候做限制,假如我们想在整个文档编辑期间都要设置为区分大小写,那么我们可以:

  • :set ic (ignore case)不区分大小写
  • :set noic (not ignore case)不区分大小写

也可以配置下~/.vimrc,让我们的vim大小写不敏感:

1
2
3
4
" 设置为大小写不敏感查找
set ignorecase
" 如果有一个大写字母,则切换到大小写敏感查找
set smartcase

替换

简单替换表达式为::[range]s/from/to/[flags]

  • range 搜搜范围,如果没有指定范围,则用于当前行
  • from 搜索的内容
  • to 替换的内容
  • flags 搜索标记

flags有四个可选项:

  • c confirm 每次替换前询问
  • e error 不显示错误
  • g globle 不询问,全部替换
  • i ignore 忽略大小写

这些选项可以合并使用,比如cgi表示不区分大小写,整体替换,替换前询问。

在正则表达式中以\(\)括起来的表达式,在后面的替换中可以用\1\2等变量来进行替换。

比如,把稳重的所有字符串abc...xyz替换为xyz...abc:

1
:%s/abc\(.*\)xyz/xyz\1abc/g

快捷插入当前时间

~/.vimrc中定义:

1
iab xtime <c-r>=strftime("%Y-%m-%d %H:%M:%S")<cr>

这样在vim的插入模式中,输入xtime,然后按enter或esc,即可插入当前时间:2020-04-04 22:43:21

主题

https://github.com/altercation/vim-colors-solarized

使用Vundle安装插件

https://blog.csdn.net/zhangpower1993/article/details/52184581

安装插件时先需要将插件写入到.vimrc中,然后打开vim,需要首先运行:

1
:so ~/.vimrc

然后再运行:

1
:PluginInstall

要不然是没效果的。

折叠

vim有六种方式折叠:

  • manual 手工定义折叠
  • indent 用缩进表示折叠
  • syntax 语法高亮来定义折叠
  • diff 对没有更改的文本进行折叠
  • marker 用标志折叠

手动折叠

在vim中添加如下配置:set foldmethod=manual

然后将光标放入某一个段落,然后键入:zfap

这会将该段落被一行高亮文本所替代,即创建了一个折叠。

zf是一个操作,而op是文本对象。可以将zf和任何一个移动命令结合,为所经之处创建一个折叠,zf也可以在可视模式下使用。

想打开折叠可以用:zo

再次关闭折叠:zc

可以用zr来打开所有的折叠。

相反的操作是zm。折叠更多。

其他设置

设置行高

1
set linespace=4

设置字体和字体大小

1
set guifont=Monaco:h14

打开文件

find 命令

:find命令可以打开一个带路径的文件.
:edit命令也可以打开一个带路径的文件,这个文件也可以不存在,在编辑好后,:w命令可以写入,从而创建文件.

<C-g>命令可以查看文件的状态. 会显示文件名字,以及是否是新文件[New],以及是否编辑过[Modified]

移动

基本的操作我们也知道,使用j向下移动一行,使用k向上移动一行.

但是当一行文本为了适应窗口宽度而换行回绕的时候,我们用j的话是移动一整行,但是我们可能要定位到折行的某个地方.

这时候可以用g和移动健结合,比如<g + j>,可以向下移动一个屏幕行.

这样理解,实体行就是真实的一行,前面有行号,折行的部分没有行号.屏幕行就是我们看到的一行行,可能一个实体行会折行成两三行.

  • j 向下移动一行
  • gj 向下移动一屏幕行
  • k 向上移动一行
  • gk 向上移动一屏幕行
  • 0 移动到行首
  • g0 移动到屏幕行的行首
  • ^ 移动到真实行的第一个非空白字符
  • g^ 移动到屏幕行的第一个非空白字符
码字辛苦,打赏个咖啡☕️可好?💘