0
点赞
收藏
分享

微信扫一扫

Vi/Vim 的命令以及基础使用

得一道人 2023-09-18 阅读 45

@Author: Basil Guo @Date: Mar. 26, 2019 @Description: Vi/Vim 的命令以及基础使用

1. 基础

查看vimrc读取顺序:在vim打开的文件中输入:version或者vim --version可以看到最后的读取顺序:

$ vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Oct 13 2020 15:49:09) # 版本信息
Included patches: 1-1453 # 补丁包,确切的版本号是8.0.1453
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by pkg-vim-maintainers@lists.alioth.debian.org
Huge version with GTK3 GUI. Features included (+) or not (-): # 是否支持GUI,这里是支持。VIM特性集合分为Tiny、Small、Normal、Big以及Huge
... # 特性列表,+是支持,-是不支持,不同特性集合启用了不同的特性
system vimrc file: $VIM/vimrc # VIM的vimrc读取顺序
user vimrc file: $HOME/.vimrc
2nd user vimrc file: ~/.vim/vimrc
user exrc file: $HOME/.exrc
system gvimrc file: $VIM/gvimrc
user gvimrc file: $HOME/.gvimrc
2nd user gvimrc file: ~/.vim/gvimrc
defaults file: $VIMRUNTIME/defaults.vim
system menu file: $VIMRUNTIME/menu.vim
fall-back for $VIM: /usr/share/vim
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -Wdate-time -g -O2 -fdebug-prefix-map=/build/vim-EfP9JP/vim-8.0.1453=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -Wl,-E -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl -L/usr/lib -llua5.2 -Wl,-E -fstack-protector-strong -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu/perl/5.26/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -lpython3.6m -lpthread -ldl -lutil -lm -L/usr/lib/x86_64-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lm

相关帮助:

$ vim filename
:h :version
:h feature-list
:h +feature-list
:h hash-patch

VIM备忘录 VIM-cheat-sheet

  • vim cheat sheet
  • vim cheat sheet
  • vim cheat sheet
  • vim cheat sheet

vim小技巧:

  • vim有三种模式:Normal、Command、Insert。
  • .:重复上一条命令
  • %:括号之间配对
  • mx:m是标记,x是a-z之间的任意一个字母,后续返回到标记::x,x是之前的标记。删除行会取消标记,重复使用字母将会取消原标记,添加新标记
  • v:可视模式,从当前光标开始选择
  • V:可视行模式,从当前行开始选择
  • Ctrl+v:可视块模式,从当前列开始选择

2.文件

2.1 打开文件

  • vim FILENAME [FILENAME2 ...]:打开文件,如果不存在则创建文件,可以一次性打开多个,需要跳转则使用:next跳转到下一个文件,:prev跳转到上一个文件,使用:last跳转到最后一个文件,:first跳转到第一个文件
  • vim FILENAME +LINE_NUM,打开之后定位到这一行
  • vim FILENAME +:只有+,定位到文件末尾
  • vim FILENAME +/PATTERN: 打开文件,定位至第一次被PATTERN匹配到的行的行首

2.2 关闭文件

2.2.1 末行模式关闭文件

  • :q: 退出
  • :qa:退出打开的多个文件
  • :wq: 保存并退出
  • :x:保存并退出
  • :q!: 不保存并退出
  • :w: 保存
  • :w!: 强行保存
  • :w !sudo tee %:只读下保存修改后的文件
  • ZZ: 命令模式下保存并退出

2.3 分屏

  • vim -o FILENAME1 FILENAME2 [...] 水平分割显示
  • vim -O FILENAME1 FILENAME2 [...] 垂直分割显示

分屏基于Ctrl+w,w代表window,在此基础上,即按过Ctrl+w之后松开,

  • s:水平分割窗口

  • v:垂直分割窗口

  • w:按顺序切换窗口

  • h|j|k|l:也可以使用ARROW方向键进行窗口切换

  • r:reverse,互换窗口,只有两个的时候可用

  • c:close,关闭窗口,但是不能关闭最后一个窗口

  • q:quit,退出当前窗口,如果是最后一个窗口,则关闭vim,qa关闭所有窗口

  • o:other,关闭其它文件

  • :e .:查看当前目录有哪些文件。需要先保存才能打开另一个文件。

  • :e <path/to/file>:命令模式下打开新的文件

  • :n filename:新建文件并切换。

  • :n:打开多个文件时,打开下一个文件,不能循环

  • :bp:打开多个文件时,打开上一个文件,可以循环

  • :bn:打开多个文件时,打开下一个文件,可以循环

  • :r filename:从另一个文件中读取其内容粘贴到当前光标下。

  • :w filename:相当于另存为,不会切换文件。

  • :START,ENDw /path/to/file:只另存某些行到一个新的文件。

  • :saveas <path/to/file>:另存为

  • :sp [filename]:上下分屏,不写文件名,分的是当前文件

  • :vsp [filename]:左右分屏,同上。

不过VIM的分屏我觉着不好用,一般我都是使用tmux。

3. 基础使用

3.1 移动光标

3.1.1 逐字符

  • k:↑,简记Korea
  • j:↓,简记Japan,从地图上看,Japan在Korea南边,下边,所以j是向下,k是向上
  • h:←
  • l:→

3.1.2 逐单词

  • w:下一个单词词首
  • b:上一个单词词首
  • eE:当前或下一个单词词尾

3.1.3 行内跳转

  • 0:行首
  • ^:行第一个非空字符
  • $:行尾

3.1.4 行间跳转

  • gg:第一行
  • nG:移到第n行,相当于:n
  • G:移到最后一行
  • :NUM:命令模式下跳转到第NUM

3.1.5 段落跳转

  • {:上一段
  • }:下一段
  • %:括号匹配

3.2 翻屏

  • Ctrl+f: 向下翻屏

  • Ctrl+b: 向上翻屏

  • Ctrl+d: 向下翻半屏

  • Ctrl+u: 向上翻半屏

  • Ctrl+E:向下滚屏

  • Ctrl+Y:向上滚屏

3.3 编辑命令

3.3.1 删除命令

  • x: 删除光标所在处单个字符

  • #x:删除光标及之后#个字符

  • x:删除光标下文字

  • s

  • S:清空一行,相当于^c

  • dd :删除当前行

  • d$:删除从光标位置到行尾,D:删除至末尾

  • d^:删除从光标位置到行首,d0:删除至行首

  • dw:删除一个单词包括后续空格,de:删除一个单词,不包括后续空格

  • d:命令跟跳转命令组合使用,#dw, #de, #db#代表数字

  • dd: 删除当前光标所在行

  • #dd: 删除包括当前光标所在行在内的#行

  • :START,ENDd:命令模式下删除从STARTEND的行,.表示当前行,$表示最后一行,+#表示向下的#行,-#表示向上的#

3.3.2 粘贴命令

  • p:如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果非整行,则粘贴至所在字符后方
  • P:如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果非整行,则粘贴至所在字符前方

3.3.3 复制命令

复制,y,yank,用法同d命令。VIM的文本缓冲区和系统剪切板不是同样的东西,其它程序Ctrl+C复制的内容,粘贴不用使用p,需要进入编辑模式,然后鼠标右键。或者:set paste

  • y[w|b|h|j|k|l]:复制
  • yy: 复制当前光标所在行
  • #yy: 复制包括当前光标所在行在内的#行
  • :START,ENDy:命令模式下复制从STARTEND的行,.表示当前行,$表示最后一行,+#表示向下的#行,-#表示向上的#
  • nyy:复制当前行后多行
  • p:光标之后粘贴剪切板内容

3.3.4 修改

  • c, change,用法同d
  • ce cw:从当前位置删除到单词末尾

3.3.5 替换

  • r:只修改当前一个字符
  • R:一直替换当前光标之后的内容
  • s:Insert 模式,即新插入的字符会覆盖后续字符

3.3.6 撤销操作

  • u:fix the last commands,可以和数字连用#u
  • U:fix a whole line
  • Ctrl+r:redo

3.4 插入模式

从命令模式下进入插入模式:

  • i:当前光标位置插入,10i*<ESC>:重复插入10个*号。
  • I:行首插入,VISUAL-BLOCK模式下,选中多行,I可以输入字符<ESC>可以多行相同操作。
  • a:当前光标之后插入
  • A:行尾插入
  • o:下一行插入
  • O:上一行插入

3.5 可视化模式

  • v: 按字符选取
  • V:按行选取
  • Ctrl+v:按矩形选取

搭配移动光标的字符进行使用

3.6 查找替换

3.6.1 查找

  • /PATTERN

  • ?PATTERN

    • n:向下查找
    • N:向上查找
  • *:到下一个该单词处,相当于先查找,后n

  • #:到上一个该单词处,相当于先查找,后N

3.6.2 替换

  • ADDR1,ADDR2s/PATTERN/string/gi,末行模式下查找并替换
  • :%s/old/new/g:全局替换, %表示替换整个全文,是1,$的简写

可视区范围替换,需要先选中,:s/old/new/g,替换当前范围所有匹配

确认替换:%s/old/new/gc,就是多了一个confirm确认过程

  • y:yes
  • n:no
  • a:all
  • q:quit
  • l:last

4. 高级话题

4.1 set

  • :set number:显示行号,简写:set nu

  • :set nonumber:不显示行号:set nonu

  • :set ignorecase:忽略大小写,简写:set ic

  • :set noignorecase:区分大小写,用处不多,:set noic

  • :set autoindent:设置自动缩进,:set ai

  • :set noautoindent:取消自动缩进,:set noai

  • :set hlsearch:查找的文本高亮显示,:set hls

  • :set nohlsearch:查找的文本不高亮显示

  • :syntax on:语法着色

  • :syntax off:语法不着色

永久有效需要在配置文件中进行配置

  • /etc/vimrc:全局有效
  • ~/.vimrc:当前用户有效

4.2 缩进

  • >:可视化模式下,右侧缩进
  • <:可视化模式下,左侧缩进
  • =:可视化模式下,格式化代码

4.3 MISC

  • :! COMMAND:跟Shell交互
  • .:重复上一次的命令
  • %:匹配大括号
  • :help <command>:查看某条命令的帮助
举报

相关推荐

0 条评论