vim 基本操作
vim 基本操作
积累我的vim操作,注意这不是入门资料,是长时间使用后的一些初级积累和整理
常用组合操作
- 全选: ggVG
- 交换两个字符位置 xp
- 上下两行调换 ddp
-
常见错误
- vim 不能正常保存,需强制保存看是不是在_vimrc中设置了临时文件的路径,但你并没有创建相应的文件夹。这种情况多发生在重装系统的情况下。
打开关闭
- ZZ 相当于:wq
- ZQ相当于:q!
- :saveas <path/to/file> →另存为 <path/to/file>
- 追加到一个文件 :2 w >>a.txt 把第2行追加到a.txt
移动类
- 为了满足少数用户屏幕行的移动,vim提供了 gj gk 命令,来实现屏幕行的移动
- shift + g 直接跳到最后一行 相当于 G
- H移动到屏幕第一行 L移动到屏幕最后一行 M移动到屏幕中间
- 放置行
- 有时我们希望将指定的行放在屏幕顶端。先将光标放在指定的行上,然后输入z<Enter>,这一行就会出现在屏幕的顶端了。我们还可以利用参数将指定的行置于屏幕顶端。例如命令8z<Enter>就是将第八行置于屏幕顶端。这个命令将指定的行置于顶端,并将光标移动到本行第一个非空白字符处。
- 如果要将指定行置于顶端,并将光标保持在一行的当前位置不变,可以使用zt命令。
- 如果要将指定的行放在屏幕底部,可以使用命令z-或是zb。所不同的是,前者将光标放在这一行中第一个没有空白符的字符处,而后者是保持光标的位置不变。
- 命令zz或是z.可以将指定的行放在屏幕的中部。这两个命令的不同就是,前者保持光标的位置不变,而后者是将光标置于第一个非空白的字符处。
- 屏幕移动类
命令小结CTRL-E
向下动滚一行 CTRL-F
向下滚动一屏 PageDown
CTRL-B
向上滚动一屏 PageUp
H
移动到屏幕顶部 M
移动到屏幕中间 L
移动到屏幕底部
标记与宏
- m
- q
- @s 播放宏s
- @@播放刚才的宏
跳转类操作
- Ctrl+O 跳转到前一个位置, 多次按可依次往前跳
- Ctrl+I 如果使用了Ctrl+O,则再使用Ctrl+I可以往回跳
- '{标记} 返回到标记的那一行的行首
- `{标记} 返回到标记的那一行的具体的位置
- '. 跳转到上一次修改过的行(SUPER) {这与 '标记 很像 也是跳到标记的那一行}
- `. 跳转到上一次修改过的地方,比行还精确 { 与`标记很像,跳到标记的那一位置}
- '' {两个单引号}返回到你最后停留的那一行的行首
- ``{两个tab键上面的那个键}返回到你最后停留的那一个具体的位置
基本编辑操作
- A 行尾插入
- y0 d0
- y$ d$
- yfa dfa
- :12,y 拷12行到光标所在行之间的内容
- :,24 y 拷光标当前行到24行之间的内容
- 10w 路过10个字
- 插入100个de 100ide <esc>
- 用vim 写文本文件时遇英文 故意留空格,这样用w可以快速移动到英文。{我自己的体会}
- C 修改光标处到行末字符,即先删除后插入(same as c$)
- 两行合并为一行:J
- 合并多行 :3,5join 合并3-5行
- 10w 路过10个字
- 插入100个de 100ide <esc>
- 用vim 写文本文件时遇英文 故意留空格,这样用w可以快速移动到英文。{我自己的体会}
- C 修改光标处到行末字符,即先删除后插入(same as c$)
- 用一条命令删除第 50 行到 100 行
-
是在一次面试中被问到的一个问题,当时没回答出来,但是永远也不会忘记了。
:50,100 d
删除第50行
:50 d
-
- >> 输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:12,24> 此命令将12行到14行的数据都向右移动一个 tab. - > 增加缩进,"x>"表示增加以下x行的缩进
< 减少缩进,"x<"表示减少以下x行的缩进 u/U在正常模式下与选择模式下作用不一样
正常模式下:u 撤销 U用来撤消整行无作用
选择模式下:u 将选择的字母变小写 U将选择的字母变大写
- 标注marks
Examples:
ma - set current cursor location as mark a
'a - jump to beginning of line of mark a
`a - jump to postition of mark a
d'a - delete from current line to line of mark a
d`a - delete from current cursor position to mark a
c'a - change text from current line to line of mark a
y`a - yank text to unnamed buffer from cursor to mark a
:marks - list all the current marks - r 只替换当前光标的字母,R 会向后替换
大小写转换
- ~: 更改当前光标下的字符的大小写 注意是波浪号
行内跳转
0
^
$
f
F
t
T
e w E W b B0
→到行头^
→到本行的第一个非blank字符$
→到行尾g_
→到本行最后一个不是blank字符的位置。fa
→到下一个为a的字符处,你也可以fs到下一个为s的字符。ta
→到逗号前的第一个字符。逗号可以变成其它字符。3fa
→在当前行查找第三个出现的a。F
和T
→和f
和t
一样,只不过是相反方向- w 到下一个单词的开头
e到下一个单词的结尾
如果你认为单词是由默认方式,那么就用小写的e和w。默认上来说,一个单词由字母,数字和下划线组成(陈皓注:程序变量> - b前一个单词的开头
- B按blank前一个单词的开头
- 如果你认为单词是由blank字符分隔符,那么你需要使用大写的E和W。(陈皓注:程序语句
基本查找操作
- 快速查找单词
- * 高亮显示光标处当前单词(以空格为区分 即test test1则test test1各为一个单词),并跳转到下一匹配处
- # 与*相反,跳转到上一匹配处
- 注意 * # 只匹配整个单词。 即test 只能匹配test 不能匹配test1中的test
- g* g# 可以部分匹配。 如test 可以匹配test 也可以匹配test1中的test
- /<C-R><C-W> : Pull <cword> onto search/command line
分屏操作
- 命令一览
命令小结 :split
新建一个窗口并显示当前文件 :new
新建一个窗口并开始新文件 :sview
新建一个窗口并只读打开文件 ctrl+Ww
切换窗口 ctrl+Wj
切换至下一窗口 ctrl+Wk
切换至上一窗口 ctrl+Wt
切换至顶部的窗口 ctrl+Wb
切换至底部的窗口 ctrl+Wp
切换至刚才所在的窗口 ctrl+Wr
向下循环移动窗口 ctrl+WR
向上循环移动窗口 ctrl+Wx
将当前窗口与下一窗口位置对换 ctrl+WK
将当前窗口放到最顶端 ctrl+WJ
将当前窗口放到最底部 ctrl+Wc
关闭当前窗口 ctrl+Wo
关闭其他所有窗口 ctrl+W+
增大窗口 ctrl+W-
减小窗口 ctrl+W=
等分窗口 Ctrl+W_
最大化窗口 <C-w><dir>
: dir就是方向,可以是hjkl
或是←↓↑→中的一个,其用来切换分屏。
文件、buff操作
- 命令一览
基本命令
- 显示换行符 $ :set list 如果要取消 :set nolist
- 生成html :TOhtml 也可选择范围 如 :10,40TOhtml 如果是diff窗口还会显示两个窗口的内容。
- 指定一个文件的类型:set ft=vimwiki
- 指定文件格式是unix下还是dos下 set fileformats=unix
-
命令
:set ruler
可以打开标尺选项(ruler option)。将在屏幕右下角,显示当前所在的行和列,以及相对于整个文件所处的位置。 -