vi命令-跳舞吧,手指

几年之前写过一篇个人总结的vi命令的文档 vi命令-准备好你的手指!
随着时间的流逝,发现很多命令已经不能满足简单入门级的要求,因此,针对vim命令的使用又做了更新。如果对vim使用要求比较高的同学,可以参考此文档进行练习。
目的就是能够高效地使用vim的各种指令,提高工作效率,因此本文也大言不惭的起了一个名字: 跳舞吧,手指

另外考虑到因为工作中常常需要接触不同的机器,在每个机器操作之前都先进行一下vim的设置也不大现实。因此文本的介绍尽可能通用简单一些,对于需要个性化的设置也做了一些取舍,尽量不要做过多的个性化配置。

vim的某些命令并不是单纯的就是属于某个操作,比如使用f+字符的方式进行查找,可以说是光标的跳转命令,也可以说是查找命令。如果是使用d+t+字符,又变成了删除命令。因此,在对命令的介绍时,分类不是唯一的,只是介绍方便,大家需要多多练习,体会命令的多种用途。

建议使用vim8及以上版本

vim的配置

(基础是对vim命令的熟悉,只有在熟悉的基础上才能打造专属的个性化配置,没有一个功能强大的配置是完全通用的)
使用:colorscheme 显示当前的主题配色方案,通常是default
使用:colorscheme <ctrl+d> 可以显示所有的配色方案
源代码名称:vim-hybrid
源代码网址:http://www.github.com/w0ng/vim-hybrid
复制颜色/hybrid。vim到:~/.vim/colors/hybrid.vim
添加到 ~/.vimrc: setbackground=darkcolorscheme hybrid

对于上述内容,请大家自行搜索配置

环境设置

~/.vimrc的常用参数:(为了方便大家比对,按照字母进行了排序)

set autoindent "设置自动缩进
set background=dark "设置背景色为暗色
set expandtab "制表符会以相应宽度的空格来代替
set incsearch "在键入目标字符串的过程中同时开始了搜索工作
set ignorecase "设置忽略大小写, 关闭noignorescase
set hlsearch "高亮显示所有符合的匹配, 关闭nohlsearch
set list "让文件中的制表符成为可见字符
set nowrap "不要折行,这样不会把超出当前显示窗口显示宽度的行折到下一行显示
set nowrapscan "搜索到文件头或者文件尾时就停止,不会进行文件循环搜索
set mouse=a "使用鼠标右键进行粘贴
set ruler "在vim窗口的右下角显示当前光标的行列信息
set softtabstop=4 "设置制表符的宽度为4 ('tabstop’选项的默认值是8,如果改变这个值可能会影响其它的程序)
set textwidth=80 设置一行的最多字符数为80,如果大于设置的数目vim就会自动换行

"map - Normal模式下按键映射 unmap - 删除一个映射

syntax case match "在匹配语法元素时是大小写敏感的
syntax case ignore "在匹配语法元素时是大小写不敏感的
syntax clear "暂时关闭语法高亮
syntax enable "语法高亮(有的也写作syntax on)
syntax off "停用语法高亮

syntax keyword {group} {keyword} - {group}是语法组的名字,
使用“highlight”命令可以将一组颜色方案应用到该{group}语法组上,{keyword}参数指定了实际的关键字
例如 syntax keyword xType int long char “这个命令使"int” “long” "char"以同一种方式高亮显示
syntax keyword xStatement if then else endif “这个命令使"if” … "endif"以另一种方式高亮显示
highlight link xType Type "使得vim对组"xType"与"Type"相同的语法高亮
highlight link xStatement Statement "使得vim对组"xStatement"与"Statement"相同的语法高亮

我的.vimrc(结合zsh使用)
(在vim的normal模式下,敲入: h option-list回车查看所有的选项设置,所以针对这些设置就不解释其含义)

" this is my settings 
" molokai, if file ~/.vim/colors/molokai.vim exists
colorscheme molokai
set background=dark
set t_Co=256

set autoindent
set cursorline
set expandtab 
set hlsearch
set ignorecase
set incsearch
set list
set number
set nobackup 
set mouse=a
set relativenumber
set ruler
set shiftwidth=4
set showcmd
set showmatch
set softtabstop=4
set wrap


" 在输入配对的括号或引号后,文本光标会自动移动到括号或引号之间以便用户输入包含在括号或引号之间的内容。
inoremap () ()<Left>
inoremap [] []<Left>
inoremap {} {}<Left>
inoremap "" ""<Left>
inoremap '' ''<Left>

" using w to save files, 不递归使用w -- 测试并没有生效
inoremap <leader>w <Esc>:w<cr>
nnoremap <leader>w :w<cr>

" 当遇到没有行号的行时,gj/gk 命令会使光标按虚拟行移动,
" 而当遇到有行号的行时,光标则按物理行移动。这与相对行号一起,堪称绝配
noremap <silent> <expr> j (v:count == 0 ? 'gj':'j') 
noremap <silent> <expr> k (v:count == 0 ? 'gk':'k') 


" easymotion 插件的使用
nnoremap ss <Plug>(easymotion-s2) 

call plug#begin('~/.vim/plugged')
Plug 'dense-analysis/ale'
Plug 'easymotion/vim-easymotion'
Plug 'sbdchd/neoformat'
Plug 'tpope/vim-commentary'
Plug 'w0ng/vim-hybrid'
Plug 'yggdroot/indentline'
call plug#end()

vim操作介绍

命令的帮助
在使用vim时忘记某些命令可以使用:help 需要查询的命令 的方式来查看帮助文档

模式之间的切换

(普通模式,插入模式,替换模式,视图模式)
使用i/a/o等命令从normal模式进入编辑模式

使用esc按键或者ctrl+[: 从编辑模式进入Normal模式

v : (小写字符)进入Visual模式
V :(大写字符)进入Visual模式(整行整行的选择文本)
Ctrl-V :进入Visual模式(矩形的文本块为对象,使用o将光标置于被选中文本的另一头)
R : 进入replace模式, r命令是针对当前光标的字符的单个替换

光标的移动操作

$ : 移动到行尾
0 : 移动到当前行的第一字符
^ : 移动到当前行的第一个非空白字符(可以用0w来替代)
% : 在匹配的括号之间跳转,光标需要在其中一个括号上。这里的括号是指小括号,中括号和大括号

·· :(键盘左上角的反引号) 回到刚才光标的位置,可以用在两点之间来回跳转

w/W : 将光标移动到 下一个 word/WORD的首字符
b/B : 将光标移动到 前一个 word/WORD的首字符
e/E : 将光标移动到 下一个 word/WORD的尾字符

ge : 将光标移动到前一个word的尾字符

对于w/W b/B e/E等命令是以word和WORD为单位进行移动。
word:一个数字和字母组成的连续字符串,等号,空格,其它各种括号等等都是一个word,以空格和其它各种字符为分隔符
WORD:以空格为分隔,只要是连续的内容,不论字母、数字、各种符号,都是一个WORD

} : 移动到一段的末尾
{ : 移动到一段的开头
% : 在匹配的小括号,方括号和花括号之间跳转(不支持尖括号,不确定是不是因为无法分辨时尖括号还是大于小于号)

f+字符: 在当前行内进行查找移动,然后使用分号;继续向右进行搜索移动 或者使用逗号,向左进行搜索移动
t+字符: 也是在当前内进行查找移动,与f不同的是,f是跳转到搜索到的字符,t是跳转到搜索字符的前一个字符。分号和逗号同样适用

g Ctrl-g : normal模式下查看光标所在的字符在整个文件中的位置(g和Ctrl-g之间并没有空格)
gg : 到达文件的第一行
G : 到达文件的最后一行
zz : 将当前行置为屏幕正中央

H : 到达当前屏幕的最上方(可理解为High)
M : 到达当前屏幕的中间部分(可理解为Middle)
L : 到达当前屏幕的最下方(可理解为Low)

Ctrl-f : 向文件尾部滚动一屏(forward)
Ctrl-b : 向文件头部滚动一屏(backward)

gv : normal下执行此命令,会重新选中上次的高亮选区,并进入visual模式
gi : normal下执行此命令,会快速回到上次编辑的位置,并进入编辑模式
gd : normal下执行此命令,会高亮显示当前光标处的字符串,然后可以使用n或者N进行下一个字符串的查找

gq : 将一行文本重新格式化(在Visual模式下选定要格式化的内容,然后再按下命令"gq")
(gq命令根据indent comments textwidth等多个选项进行工作)

删除操作

x : 删除字符
dd : 删除当前的一整行
d配合其它一些进行组合,达到快速删除字符串的的目的
dw : 删除当前光标至一下word的开头
d$ : 删除当前光标到行尾的内容(相当于D)
d0 : 删除当前光标到行首的内容
dG : 删除当前行至文件尾的内容
dt):删除光标到)的内容
dt":删除光标到"的内容

xp : 交换两个字符(x是删除字符,但是删除的字符会被放到一个寄存器里面,然后使用p命令取回)

d和x通过搭配数字来执行多次删除操作,比如2dw或者4x

文本对象

这里所说的文本对象可以是一个单词,一行语句,或者括号,引号里面的内容。
通常我们需要选中多个单词进行操作。
vi" 表示选中引号"内中的内容(不包含引号)
va" 表示选中引号以及引号"内中的内容(包含引号)
除了双引号之后,还可以跟圆括号,尖括号,方括号,大括号,中括号,单引号,反引号等
使用这种方式选中文本对象之后,可以通常进行复制或者删除操作。

除了使用v来表示选中之外,还可以使用c表示选中后删除,并进入插入模式;d表示删除;y表示复制

visual模式部分操作

在visual模式下,对于选择的内容,可以使用x来进行删除

visual模式下的操作
viw 选中一个单词
vaw 选中一个单词,包含单词后的空格
vis 选中句子
vip 选中段落
vi( 选中圆括号中的内容,不包含括号,如果需要包含括号使用va(
vi[ 选中中括号中的内容,不包含括号,如果需要包含括号使用va[
vit 选中其它字符间隔的内容

选择3个单词可以使用v3aw或者v3iw
(可以将v选择操作指令替换为c、d、y等操作符来针对文本对象进行操作)
o 在visual模式下切换选取边界,在选择边界进行切换

Crtl+v,进入块选择操作,向下移动若干行,使用e移动到选中单词的词尾

Crtl+v,进入块选择操作,向下移动若干行,使用$到达长短不一的行尾,使用a添加需要添加的内容

diw daw dw的区别
dw删除光标之后的单词部分,
diw删除当前光标所在单词,但是不包含空格
daw删除当前光标所在单词以及单词后面的空格

修改操作

常用的3个命令:r(replace) c(change) s(substitute)

s : 删除当前字符并进入插入模式。可以结合数字来用,比如3s表示删除3个字符并进入插入模式
c可以跟其它命令搭配使用,可搭配的对象和d可搭配的对象基本一致。
cw : 删除一个word然后进入插入模式,相当于dw i两个命令的操作。
cc : 删除当前行并进入插入模式,相当于dd命令和o命令的组合
c$ : 修改当前光标一直到行尾的内容,相当于d$ i两个命令的操作

复制粘贴操作

复制然后粘贴的命令组合是y+p; 剪贴的命令组合是d+p或者x+p
yw : 复制一个word
yy : 复制一整行
y$ : 复制当前光标至行尾
(如果vimrc中设置了autoindent,在粘贴多行的时候会出现代码缩进混乱,这个时候需要使用:set paste和:set nopaste来进行解决)

查询操作

使用/或者? 进行前向或者反向的搜索,使用n或者N对搜索记录进行跳转
敲入/或者?之后使用方向键,可以使用之前的搜索记录。搜索记录对前向搜索还是反向搜索都是共享的
/<the> : 匹配独立的单词“the”

  • : 将光标定位于某个word上,然后按下""键,vim会将这个word作为目标字符进行搜索。#是号的反向版。
    (使用gd 加上n或者N也可以达到选中,搜索,跳转的效果)
    \c \C : 如果只想对搜索模式的一部分应用大小写不敏感的策略,可以在前面加上一个“\c”,如果大小写敏感则可以使用"\C"
    ("\c" 和 “\C”这个两个前缀的优先级高于‘ignorecase’和‘smartcase’)

搜索替换操作

命令格式为 :[range]s/{pattern}/{string}/[flags]
range用于命令范围,比如20到30行,写为 20,30 %表示全部行, $表示最后一行 (这个方便用于文件很长的情况下, 因为当前行的行号是容易知道的。 )
pattern表示要替换的内容,支持正则表达式
string表示替换后的内容
flags常用的有 g:表示全局执行 c:表示每个替换之前需要确认

命令示例

:20, $ s /\<good\>/OK/g   这种方式精确匹配一个单词good,而不会匹配goodmoring这样的内容
:%s/\s\+$//    命令作用-消除行尾的空格或者跳格键,这个命令并不能删除空白行,
              命令解释-从整体上来看,这是个查找替换的命令,命令的格式为:范围/word1/word2/
              %表示作用的范围是每一行,\s\+$表示的是行尾的一个或多个空白字符   

模式匹配

/a* 匹配“a” “aa” “aaa” 等等以及“”
/ab* 匹配“ab” “abab” “ababab” 等等以及“”
/ab+ 匹配“ab” “abb” “abbb” 等等
/cellx= 匹配“cell” “cellx” 等等 = 表示一个可有可无的项
/ab{,4} 匹配0,1,2,3或者4次 “a” “ab” “abb” “abbb” “abbbb”
/ab{3,} 匹配3次以及以上 “abbb” “abbbb” 等等
/ab{0,1} 匹配0次或者一次,相当于=
/ab{0,} 匹配0次或多次,相当于*
/ab{1,} 匹配1次或多次,相当于+
/ab{3} 匹配3次
/ab{-1,3} 匹配时尽可能少次数的重复,对于“abbb”使用/ab{-1,3}匹配到的是“ab”
/{-} 匹配前面的项一次或0次 ,比如/a.{-}b 会匹配到"axbxb"中的“axb”, /a.*b匹配到的是“axbxb”
/foo|bar 匹配到"foo"或者“bar” 在一个模式中的“或”操作符是“|”,
/foo∥bar+ 匹配到"foo" “foobar” “foofoo” “barfoobar” 等等。 要匹配多次,必须把整个字符串用"“和”

“前后括起来,
/[0-9a-f] 指定匹配的范围
/[^some_set] 避免匹配到某个或者某些特殊的字符,在[]字符集的开头用”^"

常用的一些预定义字符集-注意这些项不能用于[]内部
\d 数字,等价于 [0-9] 使用[0-9]比使用\d执行起来要慢一点,下同
\D 非数字,等价于 [^0-9]
\x 十六进制数,等价于 [0-9a-fA-F]
\X 非十六进制数,等价于 [^0-9a-fA-F]
\s 空白字符,包含空格符和制表符
\S 非空白符,除空格符和制表符之外
\l 小写字母,等价于[a-z]
\L 非小写字母,等价于[^a-z]
\u 大写字母,等价于[A-Z]
\U 非大写字母,等价于[^A-Z]
\h 字母,等价于[A-Za-z]
\w 数字和字母,等价于[0-9A-Za-z]
<, > 用于识别整个的单词

寄存器的使用

:reg 查看寄存器内容
"+寄存器名称+操作内容
比如
"ayiw 复制一个单词到寄存器a
"byy 复制一行到寄存器b
“c3dd 删除当前行和下面2行 并且把内容存到 字母寄存器c中
“+ 表示系统剪贴板,在复制之前加上”+就可以将内容复制到系统剪贴板,这样就可以在别的地方进行使用了。
同样在其它地方复制的内容也可以在vim中使用”+p进行粘贴
(这个特性需要clipboard支持,可以通过:echo has(‘clipboard’)查看是否支持,返回1表示支持)
一般模式下 "寄存器名y "寄存器名d "寄存器名p 代表着复制 删除 和 粘贴
比如
"9d 表示将寄存器9的内容删除
"ap 表示将寄存器a的内容进行粘贴

多文件多窗口

对于打开多个文件以及多个窗口的情况,我个人通常都是使用tmux来进行处理的。
因此vim自身使用的多窗口操作就不再介绍了。

主要用于大量重复性的工作
使用q进行开始录制和结束录制
使用q{register}来选择需要保存的寄存器,使用@{register}来回放寄存器中保存的命令
举例:
文件中存在多行,需要在每行开头和结尾部分增加双引号
首先选中一行,执行qa表示开始宏的录制,并且将内容存在a寄存器,这是下方会出现recording的信息
然后执行添加双引号的操作:使用0回到行首,按下i插入",然后Esc退出编辑模式,$到行尾,执行a" 和esc
然后按下q表示结束录制
这样在下一行执行@a就可以在当前行的行首和行尾添加双引号了
也可以使用@@引用上个使用过的宏
如果行数很多的情况下,逐行操作效率太低。可以使用visual模式选择中多行
(然后使用visual模式下执行normal模式下命令的方式)
然后敲入冒号: 这个时候左下角出现:’<,’>字样,输入normal @a回车就可以了。
(这个时候左下角的命令行内容就是:’<,’>normal @a)

还有一种不使用宏的方式(假设所有行都需要添加双引号)
使用VG的命令,选中所有行,执行: 然后输入noraml I"回车,这样在每行开头就加入了双引号
然后同样选中所有行,执行:冒号 ,然后执行ctrl+p调出历史命令,将I"换成A"回车,这样就完成了行尾添加双引号

补全功能

目前在vim编辑中比较常用的就是补全单词 使用ctrl+n和ctrl+p进行补全单词

缩进操作

或者 :> 都可以在normal模式下缩进当前行
:m,n> 表示 从m到n行进行缩进
:m>n 表示 从m开始进行缩进,一共缩进n行
同样是从20到30行进行缩进可以使用:20,30> 也可以使用:20>10

ctrl组合键

编辑模式下的操作

ctrl+h 删除上一个字符(linux终端下也可以使用)
ctrl+w 删除上一个单词(linux终端下也可以使用)
ctrl+u 删除光标到行首的内容(linux终端下也可以使用)
ctrl-n 自动补齐,对于一个较长的字符串,可以先输入开头部分的几个字符,接着按下“Ctrl-n”键,vim会列出相近的匹配
ctrl-a : 插入上次在insert模式下录入的内容
ctrl-y : 插入光标处上一行中相同位置的字符
ctrl-e : 插入光标处下一行中相同位置的字符

normal模式下的操作

ctrl-Z : 挂起vim的执行,使得用户回到启动vim的shell中,进行别的操作,之后使用“fg”命令回到vim
ctrl-a : 光标会跳转到数字的最后一位,将数字参数加一,前缀部分也可以加一个数字参数,例如 3ctrl-a
ctrl-x : 光标会跳转到数字的最后一位,将数字参数减一,前缀部分也可以加一个数字参数,例如 3ctrl-x

其它的一些常用操作命令

. : 重复上一个操作命令
J : 将本行和下一行合并
u : 撤销操作
Ctrl-R : 反转撤销,也就是对撤销的撤销

ZZ : 保存文件并退出
:args 查看整个列表中有哪些文件,使用Vim同时打开多个文件的时候使用
:saveas another_filename - 将当前编辑的文件另存为一个新的文件名
:!{command} : 如果需要只执行一个shell命令的话,可以在vim中这样使用。例如,查看当前目录的内容:!ls

映射

通常使用映射来修改键盘的按键,
可是使用nmap/vmap/imap定义映射只在normal/visual/insert模式下生效
在映射的时候需要避免递归映射
nnoremap/vnoremap/inoremap表示对应的非递归映射

插件

插件管理器vim-plug
插件管理安装
运行终端命令
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
在.vimrc文件中配置需要下载的插件列表
call plug#begin(’~/.vim/plugged’)
Plug ‘w0ng/vim-hybrid’ //当执行PlugIstall命令 就会执行当此处,然后去官网下载对应的插件
call plug#end()

在配置文件中添加需要安装的插件列表之后后,通过输入以下命令重新加载
:source ~/.vimrc

也可以重新打开vim编辑器
执行命令
:PlugStatus查看插件状态
:PlugInstall 进行插件的安装

以下是一些插件的推荐,具体的安装方式请自行搜索
ale - 代码静态检查
far.vim - 搜索替换插件
neoformat - 代码格式化工具,这是两种常用的工具之一。 使用vim打开文件之后,输入:Neoformat进行格式化
vim-autoformat - 代码格式化工具,这是两种常用的工具之一
nerdtree - 文件目录树
indentline - 增加代码缩进线条

vim-commentray - 快速注释代码,选中需要注释的行,使用gc进行注释,gcgc进行取消注释
vim-easymotion - 移动任意位置
vim-startify - 修改启动界面

vim-colors-solarized - 配色方案
vim-hybrid - 配色方案

#代码格式化和静态检查需要对应语言的工具,
比如,对于python目前常常使用的是autopep8和pylint
需要使用pip install autopep8和pip install pylint进行工具的安装

练习

按照惯例,我们准备一个文档将上述提到的操作练习一下:
(以vdbench50406/readme.txt为例进行练习,因为水平有限,难免有些纰漏,还请大家多多指正,感谢!)

使用vim readme.txt将文件打开
将文件另存为readme_test.txt(:saveas readme_test.txt)
跳转到文件最开始的部分(gg)
插入内容This is only used for testing(i进入插入模式,输入This is only used for testing)
到达文件的最后一行,插入一个行,写入change on (G 小写字母o在下方插入一行)
查看当前的时间或者当前路径,将内容写入到change on后面(执行 ESC :!(date) 或者:!(pwd) 获取信息,按回车返回后 a继续编辑)
移动到19行(:19)
将19行与下一行进行合并(J)
向上搜索====(?====)
复制找到的整行内容(yy)
移动到文件最后,粘贴到change on那一行前面(G P)
快速返回到之前编辑的光标位置(``)
向下搜索example1的位置(/example1)
将当前标所在单词以及单词后面的空格一起删除(daw)
重复之前的操作(.)
将文件开头新增加的一行This is only used for testing向下移动3行,进行粘贴(gg dd 3j p)
在这一行的for后面添加ym,变成for ym testing (fr进行当前行搜索,使用a在光标后面增加需要增加的内容)
移动到当前行行首,增加*使得上下文格式一致 (数字0到行首,使用i进行插入 )
将本行的ym更正为my (fy定位到第一个y ;向右找到下一个匹配的地方 xp 两个字符进行交换)
在本文中搜索vdbench这个单词,而不是vdbench50406这样的单词(/\<vdbench\>)
逐个看下匹配到的内容(n或者N)
将文件中的部分vdbench替换为tools,比如vdbench.pdfz这样的就不要替换(: 1, $ s /\<vdbench\>/tools/gc )
检查文件中是否存在Vdench这样的单词(:/\CVdbench)
(如果只想对搜索模式的一部分应用大小写不敏感的策略,可以在前面加上一个“\c”,如果大小写敏感则可以使用"\C"
"\c" 和 “\C”这个两个前缀的优先级高于‘ignorecase’和‘smartcase’))
将找到的Vdbench开头的大写替换为小写(使用r进行替换操作)
再次在文件中搜索vdbench (/vdbench)
找到匹配的内容vdbench50506,查看文件中是否还有其它地方出现此单词(使用*或者#进行查找)
回到文件的最后,反向查找morning单词   (G ?morning)
将光标所在行以及下一行内容删除 (2dd)
将文件保存一下(:w)
跳转到文件中Author的位置,将单词替换为大写(R 进入replace模式进行替换)
找到文件中的exapmple7 进行复制(yw)
在后面增加 - (a -)
粘贴复制的单词(p)
在本行搜索数字7,将前面一个7替换为1(f7 使用逗号向左进行搜索移动 使用r进行替换)
将当前光标所在行置为屏幕中间(zz)
向上移动4行,并将这一行跟下一行合并(4k J)
将光标移动到*This sample parameter的上一行 开头为空白字符地方(^ 或者 0w)
进入块选择模式(Ctrl+v)
选中附近开头的*号部分,替换为#(r#)
将And vebench连同上下空白行删除(3dd)
将#开头置为####开头(使用gv重新选择刚刚Visual模式下选择的区域,y复制,然后3p进行粘贴)
向文件头部滚动一屏幕(Ctrl-b, 注意Ctrl-f是向文件尾部滚动一屏幕)
将光标跳转到屏幕的最上方(H, 注意最下方是L 中间是M)
查看当前寄存器内容(:reg)
将当前行删除并将删除内容保存到寄存器e("edd)
将剩余的2行空白注释删除(2dd)
光标启动到Copyright那一行,进行粘贴(p)
撤销粘贴内容(u)
将寄存器e的内容粘贴到copyrigh那一行("ep)
跳转到作者那一行,复制作者的名称(y2w)
将下一行的my替换为作者名称(p 2x,试一下这里为什么不用dw删除光标后面的my)
高亮作者的名称中的一个单词,看看文档中其它地方是否还有(gd 高亮, n或者N进行查找)
跳转到行尾,增加一个.($ a .)
移动到这一段的末尾,并删除2个空白行(} 2dd)
将"Read me file for vdbench50406"后面的冒号和时间戳删除(f: d$)
将行中的5个数字删除并替换为xxxx(0或者^ f5  5s xxxx)
将下一行=======删除替换为###### (定位到指定行,cc 输入######)
将java1.7.0换成11.0.0 (光标定位到1,执行10Ctrl-a, 2w, 执行7Ctrl-x)
将编辑文件挂起(Ctrl-z),看看当前时区或者切换目录啥的
重新回到编辑中的文件(fg)
找到一个圆括号或者方括号,查看括号的范围,在括号之间跳转(%)
选中圆括号中的内容,不包括括号( vi( 选中圆括号中的内容,不包含括号,如果需要包含括号使用va( )
将选择的内容删除,然后更新为this should be prepared well(用c,然后输入内容)
将,以及之后的内容删除 (f,  d$)
选中下一个段落,删除(vip 用x或者d删除)
回到上次编辑的地方 输入Please download (gi 输入内容)
选中圆括号以及括号中的内容,然后删除( va( 执行x或者d进行删除 )
查看当前光标的位置,记住当前行号(g Ctrl-g)
将44-47行向右移动一个Tab建位置(:45,48>  或者在visual 模式下选中需要缩进的行,按>)
将48-50行向左缩进(:48<50 或者使用gv选择上次选择的区域,按<)
使用<<或者>>缩进光标所在的行
将光标向右移动12个位置,使其恰好在一个单词中间, 将光标后面的单词以及空格部分删除(12l, dw)
撤销刚刚的操作(u)
删除光标所在的单词(diw)
转到文件中最后一个文本行
将You'll替换为You will (f'定位位置,执行cw删除并进入插入模式,进行修改)
复制光标到行尾的内容(y$)
将光标移动到一段的末尾(})
在空白行处粘贴2次(2p)
发现两次粘贴都在同一行内,撤销上一次操作(u)
在两个空白行处,分别进行粘贴(两次p操作)
跳转到临近的行,将光标移动到行中间一个单词的中间,选择这个单词进行复制到寄存器d(viw "dy )
回到刚刚选中的区域(gv)
重新进行选择,选择这个单词以及后面的空格(vaw)
将选择的内容复制到寄存器f("fy)
查看寄存器内容,注意比对寄存器d和f之间的差异(:reg)
光标转到刚刚粘贴的两行(内容相同的两行)
在一个行首的位置,粘贴寄存器d的内容(0 "dp)
在一个行首的位置,粘贴寄存器f的内容(0 "fp)
这个时候发现下面一行跟上一行相比会多出个空格
将光标移动到上一行,进入插入模式(k i)
将下一行的光标处的内容复制到当前行(Ctrl-e 注意Ctrl-y是复制上一行光标处内容)
将光标移动到最后一行文本行,复制最后一行内容的前半句,添加...the end.(o  Ctrl-y   ...the end.)
在文件的末尾加上This is only for testing. 转换转到文件的开头部分(i或者o  gg)
在文件的开头粘贴insert模式下编辑的内容(大写字母O进入插入模式, 执行Ctrl-a)
将光标跳转到屏幕中间(M)
查看当前行的位置(:set num 或者gCtrl-g)
跳转到上次编辑的位置,并进入编辑模式 输入作者名称的前面部分,然后补齐(gi Ctrl-n或者Ctrl-p进行补齐 )
找个非空白行进行复制并粘贴2行(yy2p)
将光标移动到行中间,将后面内容修改为 -- the front part of sentance (cw 然后输入插入内容,)
发现sentance输入错误,将单词后面的字符删除,更正输入(插入模式下Ctrl-h删除字符 然后将sentence修改)
将光标移动到刚刚修改开始的位置(0 f-)
将下一行此位置之前的内容删除(k移动到下一行开始的位置, i进入插入模式,Ctrl-u 删除光标到行首的位置)
输入the last part of sentance -- 
将sentance --修改为sentence --(插入模式下,按Ctrl-w删除上个单词,继续删除,然后输入正确的内容)
录制一个宏,存放在寄存器a,功能是在行的两边加“号
(首先选中一行,执行qa表示开始宏的录制,并且将内容存在a寄存器,这是下方会出现recording的信息
然后执行添加双引号的操作:使用0回到行首,按下i插入",然后Esc退出编辑模式,$到行尾,执行a" 和esc
然后按下q表示结束录制)
向文件尾部滚动一屏幕(Ctrl-F)
对文件中的部分行的行首和行尾分别添加“ (@a)
录制一个宏,存放在寄存器b,功能是在行的两边加<>号
查看寄存器内容,注意注意区分哪些寄存器是存放的宏,哪些是字符串(:reg)
对文件中的部分行的行首和行尾添加尖括号(@b)
在20-30行的行首添加step(:20 Ctrl-v 进入块选择操作,向下移动若干行到30行,使用o来进行选择区域的切换,到行首位置,
       大写字母I进入编辑模式, 输入step ,按esc退出 == 根据需要进入编辑模式还可能是A c s等字符)
回到20行的行首(:20 0)
选择5行的step 内容进行复制(Ctrl-v 5j e移动到选中单词的词尾 y)
转到某个空白行位置进行粘贴(p)
转到屏幕的下方(L)
光标向右移动6个单词,到达单词词尾,查找从当前光标位置出现的第3个字符'n'(6e 3fn)
删除光标到行首的内容(d0)
转到带有尖括号的一行,光标移动到行中间的位置,删除光标到>的内容(dt>)
选中声音尖括号中的内容并修改为There is one hpe (vi> c there is on hope)
选中文件中双引号以及引号内的内容,进行复制(va" y)
回到There is one hpe那一行,在p前面加个o(tp a o)
跳转到上一个单词的词尾,将one hope修改为one more(ge a more )
(w/W : 将光标移动到 下一个 word/WORD的首字符
  b/B : 将光标移动到 前一个 word/WORD的首字符
  e/E : 将光标移动到 下一个 word/WORD的尾字符 )
光标移动到屏幕上面,将这一行置为屏幕中间(H zz)
选中一个句子并删除(vis d)
插入一行注释,注释内容为“you may check the file **”[**为本目录下的一个文件名开头部分]
                    (o, you may check the file Ctrl-x Ctrl-f, 使用Ctrl-n在候选文件名中选择 )
找到文件中的Java,将J修改为j(\CJava sj)

保存退出文件(:wq 或者 ZZ--大写字母)

猜你喜欢

转载自blog.csdn.net/haiqinma/article/details/113520610
今日推荐