vim 命令合集
2015-01-26 10:20
204 查看
wget http://files.cnblogs.com/ma6174/vimrc.zip
unzip -f vimrc.zip -d ~/
配置:https://github.com/ma6174/vim简易安装方法:
打开终端,执行下面的命令就自动安装好了:wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh -x
或者自己手动安装:(以ubuntu为例)
安装vimsudo apt-get install vim
安装ctags:
sudo apt-get install ctags
安装一些必备程序:
sudo apt-get install xclip vim-gnome astyle python-setuptools
python代码格式化工具:
sudo easy_install -ZU autopep8
sudo ln -s /usr/bin/ctags /usr/local/bin/ctags
clone配置文件:
cd ~/ && git clone git://github.com/ma6174/vim.git
mv ~/vim ~/.vim
mv ~/.vim/.vimrc ~/
clone bundle 程序:
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
打开vim并执行bundle程序
:BundleInstall
重新打开vim即可看到效果
编写python程序
自动插入头信息:#!/usr/bin/env python
# coding=utf-8
输入
.或按
TAB键会触发代码补全功能
:w保存代码之后会自动检查代码错误与规范
按
F6可以按
pep8格式对代码格式优化
按
F5可以一键执行代码
多窗口操作
使用:sp + 文件名可以水平分割窗口
使用
:vs + 文件名可以垂直分割窗口
使用
Ctrl + w可以快速在窗口间切换
命令历史
以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim
在命令行窗口中输入以下命令即可vim 直接启动vim
vim filename 打开vim并创建名为filename的文件
文件命令
打开单个文件vim file
同时打开多个文件
vim file1 file2 file3 ...
在vim窗口中打开一个新文件
:open file
在新窗口中打开文件
:split file
切换到下一个文件
:bn
切换到上一个文件
:bp
查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。
:args
打开远程文件,比如ftp或者share folder
:e ftp://192.168.10.76/abc.txt
:e \\qadrive\test\1.txt
vim的模式
正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空插入模式(按i键进入) 左下角显示--INSERT--
可视模式(不知道如何进入) 左下角显示--VISUAL--
导航命令
% 括号匹配插入命令
i 在当前位置生前插入I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
查找命令
/text 查找text,按n健查找下一个,按N健查找前一个。?text 查找text,反向查找,按n健查找下一个,按N健查找前一个。
vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$
:set ignorecase 忽略大小写的查找
:set noignorecase 不忽略大小写的查找
查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。
:set hlsearch 高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。
:set nohlsearch 关闭高亮搜索显示
:nohlsearch 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
替换命令
ra 将当前字符替换为a,当期字符即光标所在字符。s/old/new/ 用old替换new,替换当前行的第一个匹配
s/old/new/g 用old替换new,替换当前行的所有匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
%s/old/new/g 用old替换new,替换整个文件的所有匹配
:10,20 s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进。
ddp 交换光标所在行和其下紧邻的一行。
移动命令
h 左移一个字符l 右移一个字符,这个命令很少用,一般用w代替。
k 上移一个字符
j 下移一个字符
以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符,在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!<Esc>,这里的Esc是必须的,否则命令不生效。
w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。
b 向后移动一个单词 2b 向后移动2个单词
e,同w,只不过是光标停在单词尾部
ge,同b,光标停在单词尾部。
^ 移动到本行第一个非空白字符上。
0(数字0)移动到本行第一个字符上,
<HOME> 移动到本行第一个字符。同0健。
$ 移动到行尾 3$ 移动到下面3行的行尾
gg 移动到文件头。 = [[
G(shift + g) 移动到文件尾。 = ]]
f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
F 同f,反向查找。
跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏
撤销和重做
u 撤销(Undo)U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。
删除命令
x 删除当前字符3x 删除当前光标开始向后三个字符
X 删除当前字符的前一个字符。X=dh
dl 删除当前字符, dl=x
dh 删除前一个字符
dd 删除当前行
dj 删除上一行
dk 删除下一行
10d 删除当前行开始的10行。
D 删除当前字符至行尾。D=d$
d$ 删除当前字符之后的所有字符(本行)
kdgg 删除当前行之前所有行(不包括当前行)
jdG(jd shift + g) 删除当前行之后所有行(不包括当前行)
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J(shift + j) 删除两行之间的空行,实际上是合并两行。
拷贝和粘贴
yy 拷贝当前行nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
p 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
shift+p 在当前行前粘贴
:1,10 co 20 将1-10行插入到第20行之后。
:1,$ co $ 将整个文件复制一份并添加到文件尾部。
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
ddp交换当前行和其下一行
xp交换当前字符和其后一个字符
剪切命令
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。
退出命令
:wq 保存并退出ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。
窗口命令
:split或new 打开一个新窗口,光标停在顶层的窗口上:split file或:new file 用新窗口打开文件
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
Ctrl+ww 移动到下一个窗口
Ctrl+wj 移动到下方的窗口
Ctrl+wk 移动到上方的窗口
关闭窗口
:close 最后一个窗口不能使用此命令,可以防止意外退出vim。
:q 如果是最后一个被关闭的窗口,那么将退出vim。
ZZ 保存并退出。
关闭所有窗口,只保留当前窗口
:only
录制宏
按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。
执行shell命令
:!command:!ls 列出当前目录下文件
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
注释命令
perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#3,5 s/^/#/g 注释第3-5行
3,5 s/^#//g 解除3-5行的注释
1,$ s/^/#/g 注释整个文档。
:%s/^/#/g 注释整个文档,此法更快。
帮助命令
:help or F1 显示整个帮助:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
:help 'number' Vim选项的帮助用单引号括起
:help <Esc> 特殊键的帮助用<>扩起
:help -t Vim启动参数的帮助用-
:help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
其他非编辑命令
. 重复前一次命令:set ruler? 查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
:scriptnames 查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
Vim教程
在Unix系统上
$ vimtutor
在Windows系统上
:help tutor
:syntax 列出已经定义的语法项
:syntax clear 清除已定义的语法规则
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案
vi (vim) 详解/图解
[语法] : vi [-wn] [-R] 文件...[说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器, 可以在 vi 中使用 ex, ed 的全部命令, vi 选项中 -wn 指将编辑
窗口大小置为 n 行, -R 为将编辑的文件置为只读模式, vi 工作模式分为命令模式和输入模式, 一般情况下在命令模式下,
可敲入 vi 命令, 进入输入模式下时可以编辑要编辑的文本, 命令 a A i I o O c C s S R 可进入输入模式, 在输入模式下
按 ESC 键可推出输入模式, 回到命令模式, 在命令模式中敲入: 命令, 则可进入 ex 方式, 在屏幕底部出现提示符 : ,
此时可使用任意 ex 命令, 屏幕底行也用来作/ ? ! 命令的提示行, 大多数命令可以在其前面加数字, 表示命令执行的重复
次数, 下面简单介绍一下 vi 的命令集, ^ 表示(CTRL) 键
^B 退回前一页, 前面加数字表示重复次数, 每次换页时
保留上一页的两行
^D 在命令模式下, 表示下滚屏幕的一半, 在输入模式下, 表示回退至
左边的自动缩进处
^E 显示屏幕底线之下的一行
^F 前进一页, 前面加数字表示重复次数, 每次换页时
保留上一页的两行
^G 显示当前文件名 , 当前行号和文件总行数, 并用百分号当前行在
整个文件中的位置
^H(退格) 在命令模式下, 光标左移一格; 在输入模式下, 删去前面的字符
^I(TAB) 在输入模式下, 产生一串空格
^J(LF) 光标下移一行
^L 刷新屏幕, 即将屏幕重新显示
^M(回车) 在命令模式下, 光标移动至下行开头
在输入模式下, 开辟一新行
^N 光标下移一行
^P 光标上移一行
^Q 在输入模式下, 将其后的非打印字符作为正文插入
^R 刷新屏幕
^U 屏幕上滚一半, 前面加数字时表示上滚的行数, 此数字对
以后的^D ^U 命令有效
^V 在输入模式下, 将其后的非打印字符作为正文插入
^W 在输入模式下, 使光标回退一个字
^Y 显示屏幕底线之上的一行
^Z 暂停编辑, 退回上层 Shell
^[(ESC) 退出输入模式, 回到命令模式
! 暂时退出编辑, 执行 Shell 命令
(双引号) 用于标志有名缓冲区, 编号缓冲区 1-9 用于保存被删去的正文, 字
母名缓冲区 a-z 供用户存放自定义的正文
$ 将光标移动到当前行尾, 前加数字则表示前移行数, 如 2$表示移动
到下一行行尾
% 将光标移动到配对的小括号() 或大括号{} 上去
( 退回句子开头
) 前移到句子开头
- 退到上一行第一个非空格字符
. 重复上一次改变缓冲区内容的命令
/ 模式 向前搜索模式, 将光标移动到模式出现处, 模式是一个正规
表达式, (参看 grep)
: 在屏幕底部提示:, 其后可使用 ex 命令
? 功能同 / , 但方向是向前查找
[[ 光标回退至前一节分界处
转意符
]] 光标前移至节分界处
^(不是 CTRL) 光标移至当前行第一个非空字符上
' 连续两个'' 表示将光标移至其移动前的位置, ' 后跟字母表示光标字
母标记的行首(参看 m 命令)
A 在行尾插入正文, 进入输入模式
B 光标回退一个字
C 替换光标后的内容
D 删除光标后的内容
E 光标前移到字尾
F 字符 在当前行向左查找指定字符
G 光标移动到其前面数字指定的行, 若未指定则移动到最后一行
H 光标移动到屏幕顶行, 若前面有数字, 则移动到屏幕上该数字
指定的行
I 在行开头插入正文
J 连接两行, 若前面有数字则连接数字指定的行
L 光标移动到屏幕底行, 若前面有数字, 则移动到屏幕底线往上数该
数字指定的行
M 光标移动到屏幕中线
N 使用模式查找/或?时, 重复找下一个匹配的模式, 但方向与上次相
反, 其功能同 n , 但方向相反
O 在当前行上开辟一新行
P 将上次被删除的正文插入光标前面, 可在其前面加缓冲区编号, 编
号 1-9 用于保存被删去的正文, 字母名缓冲区 a-z 供用户存放自定
义的正文
Q 从 vi 推出进入 ex 命令状态
R 替换字符串
S 替换整行
T 字符 向左查找字符
U 将当前行恢复至第一次修改前的状态
W 光标移至下一个字首
X 删除光标前的字符
Y 将当前行存入无名缓冲区, 前面加数字表示存入的行数, 也可用有
名缓冲区来保存, 以后可用命令 p 或 P 将其取出
ZZ 存盘退出 vi
a 光标后插入正文
b 光标回退至上一个字首
cw 替换当前字
c) 替换当前句子
dw 删除一个字
dd 删除一行
e 光标移到下一个字末
f 字符 在当前行向前查找字符
h 光标左移一格
i 在光标前插入正文
j 光标下移一行
k 光标上移一行
l 光标右移一格
m 字母 用字母标记当前行, 以后可用 ' 字母使光标移动到当前行,
(参看' 命令)
n 重复上次 / 或 ? 命令
o 在当前行下开辟一新行
p 将用户缓冲区内容放到光标位置(参看 P 命令)
r 替换当前字符
s 用一串字符替换当前字符
t 字符 光标移动至字符前
u 取消上次操作
w 光标移至下一字首
x 删除当前字符
yw 将当前字存入无名缓冲区, 前面可加 x, 表示存入名字为 x 的有名
缓冲区(x 为 a-z) , 也可加数字表示存入的字数, 以后可用 P 或 p 命
令取出
yy 将当前行存入无名缓冲区, 用法参看 yw
{ 光标移动至前一段开头
| 光标移至行首, 若前面加数字, 则移到数字指定行的行首
} 光标移至下一段开头
在: 提示符下, 常用命令如下:
: w 当前文件存盘
: w! 强制存盘
: w 文件 将内容写入指定文件
: w! 文件 强制写入指定文件
: x, y w 文件 将 x 至 y 行写入指定文件中
: r 文件 将文件读到光标位置
: r ! 命令 将系统命令的输出读到光标位置
: q 退出编辑
: q! 强制退出
: x 与命令 ZZ 相同
: e 文件名 编辑另一文件
: e ! 重新编辑文件, 放弃任何改变
: sh 执行 sh, 结束后回到编辑
: ! 命令 执行命令后回到编辑
: n 编辑下一文件
: n 文件表 重新定义待编辑文件表
: set 设置 vi 的选项, 例如 set nu 表示每行前显示行号, 在选项前
加 no 则表示清除该选项, 例如 set nonu 表示每行前不显示行
号, 下面是一些常用的选项:
ai 自动缩进
aw 编辑下一文件前自动存盘
ic 查找字符串时不区分大小写
nu 每行前显示行号
sm 输入) 及} 时显示与之配对的( 或 {
slow 插入时延迟屏幕刷新
ws 使查找能绕过文件尾从头进行
wa 写文件之前不作对文件的检查
=================================================================
vi(Visual) 是以视觉为导向的全屏幕编辑器、 共分为三种方式(mode):
command 方式:
任何输入都会作为编辑命令, 而不会出现在屏幕上, 若输入错误则有“岬” 的声音; 任何输入
都引起立即反映
insert 方式:
任何输入的数据都置于编辑寄存器。 在 command 方式下输入( I,a,A 等) , 可进入 insert 方式, insert 方式下按 ESC,
可跳回 command 方式。
escape 方式:
以“ : ” 或者“/” 为前导的指令, 出现在屏幕的最下一行, 任何输入都被当成特别指令。
进入 vi( 在系统提示符下面输入以下指令) :
vi 进入 vi 而不读入任何文件
vi filename 进入 vi 并读入指定名称的文件( 新、 旧文件均可)。
vi +n filename 进入 vi 并且由文件的第几行开始。
vi +filename 进入 vi 并且由文件的最后一行开始。
vi + /word filename 进入 vi 并且由文件的 word 这个字开始。
vi filename(s) 进入 vi 并且将各指定文件列入名单内 , 第一个文件先读入。
vedit 进入 vi 并且在输入方式时会在状态行显示“INSERT MODE"。
编辑数个文件(利用 vi filename(s)) 进入 vi 后)
:args 显示编辑名单中的各个文件名
:n 读入编辑名单中的下一个文件
:rew 读入编辑名单中的第一个文件
:e# 读入编辑名单内的前一个文件
:e file 读入另一个文件进 vi(此文件可不在编辑名单内 ) , 若原文件经修改还没有存档, 则
应先以: w 存档。
:e! file 强迫读入另一个文件进入 vi, 原文件不作存档动作。
存储及退出 vi
:w filename 存入指定文件, 但未退出 vi(若未指定文件名则为当前工作的文件名 )。
:wq 或者 :x 或者 zz 存文件, 并且退出 vi.
:q 不作任何修改并退出 vi。
:q! 放弃任何修改并退出 vi。
:!command 暂时退出 vi 并执行 shell 指令, 执行完毕后再回到 vi。
:sh 暂时退出 vi 到系统下, 结束时按 Ctrl + d 则回到 vi。
加数据指令
i 在关标位置开始插入字符, 结束时候按 ESC 键。
I 在光标所在行的最前面开始加字, 结束时按 ESC 键。
a 在光标位置后开始加字, 结束时按 ESC 键。
A 在光标所在行的最后面开始加字, 结束时按 ESC 键。
o 在光标下加一空白行并开始加字, 结束时按 ESC 键。
O 在光标上加一空白行并开始加字, 结束时按 ESC 键。
!command 执行 shell 指令, 并把结果加在光标所在行的下一行。
删除指令
nx 删除由光标位置起始的 n 个字符( 含光标位置, 按一个 x 表示删除光标所在的字符)
nX 删除由光标位置起始的 n 个字符( 不含光标位置)。
ndw 删除光标位置其实的 n 个字符组( word) 。
d0 将行的开始到光标位置的字符全部删除。
d$ 或 D 将光标位置起始到行尾的字符全部删除。
ndd 将光标位置起始的 n 行(整行) 删除(dd 表示删除光标所在行)。
:start,endd 删除文件的第 start 到 end 行。
关标移动
0 移到一行的开始
$ 移到一行的最后
[ 移到文件开始位置
] 移到文件结束位置
nh 往左移 n 位
nl 或者 spacebar 往右移 n 位
nk 向上移 n 行
n+ 向上移 n 行, 光标在该行的起始
ni 向下移 n 行
n- 向下移 n 行, 光标在该行的起始
H 移到屏幕的左上角
M 移到屏幕的中间行开头
L 移到屏幕的最后一行
G 移到文件的最后一行
nG 或者:n 移到文件的第 n 行
nw 右移 n 个字组, 标点符号属于字组
nW 右移 n 个字组, 标点符号不属于字组
nb 左移 n 个字组, 标点符号属于字组
nB 左移 n 个字组, 标点符号不属于字组
Ctrl + u 屏幕上卷半个菜单
Ctrl + d 屏幕下卷半个菜单
Ctrl + b 屏幕上卷一个菜单
Ctrl + F 屏幕下卷一个菜单
修改指令
r 修改光标文件的字符
R 从光标位置开始修改, 结束时按 ESC 键
new 更改 n 组字符, 结束时按 ESC 键
ncc 从光标所在位置开始更改 n 行, 结束时按 ESC 键
重排各行长度
i 并按 Enter 将该行由光标所在处断开, 并进入 insert 方式
J 把下一行的数据连接到本行之后
寻找指令
/text 从光标位置往下找字串 text
?text 从光标位置往上找字串 text
n 继续找下一个字串( 在输入上面的寻找指令之后使用)
寻找并且取代指令
:getxt1/s/ /text2/options 将各行的 text1 替换为 text2
option=g 表示文件中所有的 text1 均被取代, 若未输入任何 option, 则只有 各行中的第一
个出现的 text1 被取代
option=go 在屏幕显示各取代的行
option=gc 在每个字串取代之前要求确认
Start,endgtext1/s/ / text2/options 同上, 只寻找并取代第 start~end 行。
或:Start,ends/text1/text2/options
复制及移动文件
:first,last co dest 将 first 到 last 行的数据复制到目标行(dest) 下面
:Start,end m dest 将 start 到 end 行的数据移动到目标行( dest) 下。
:r filename 将指定文件的内容读入光标所在行下。
nY 将光标所在位置开始的 n 行数据暂存
p 复制暂存数据在光标的下一行
P 复制暂存数据在光标的上一行
其他命令
. 重复前一指令
u 取消前一指令
Ctrl + l 刷新屏幕显示
:set number 显示文件的行号, 但不会存文件
:set nonumber 解除行号显示
:set ai 设置每行起始位置(以光标当前位置为起始)
:set noai 取消行起始位置设定
:f 或<Ctrl> + g 告诉用户有关现行编辑文件的数据。
================================================================
Last line mode:
/exp Go forward to exp?exp Go backward to exp
:w Write buffer to disk
:w newfile Write buffer to newfile
:w! file Write Absolutely
:q Quit editor
:q! Quit,discarding buffer
:wq Write buffer and quit
:x Write if needed & quit
:f Edit & file status
:r Read file into buffer
:r file Read named file in
:e (Re)edit file
:e! (Re)edit,discard file in
:e file Edit nameed file
:3,8d Delete lines 3-8
:4,9m 12 Move lines 4-9 to 12
:2,5t 13 Copy lines 2-5 to 13
:5,9w file Write lines 5-9 to file
:s/old/new/ Current line,sub first "old" w/ "new"
:s/old/new/g Current line,sub each "old" w/ "new"
:3,9s/old/new Lines 3-9,sub first "old" w/ "new"
:%s/old/new All lines,sub first "old" w/ "new"
: %s/old/new/g All lines,sub each "old" w/ "new"
:s/pat./new A . matches any charcter
:s/pat*/new A * matches 0 or more "t"s
:s/pa[0-9aeioA-Z]/new selection set or range
:s/pa[^aeiou]/new match any non-vowel
:s/^pat/new anchor "par" to beginning of line
:s/pats/new anchor "par" to end of line
:s/old/& and new/ restoe matched pattern on sub
:%s/./ &/ indenta whoie file
:set nu Display line numbers
:set nonu Turn off option
:set all Show all settings
:set list Try to display invisible chars
:set wm=5 Wrap lines 5 sp from R margin
Command mode:
<- | ->hljk Cursor movement
G Goto last file line
3G Goto line 3
0 Goto line start
$ Goto line end
% Goto matching brace/paren
H Goto screen top
M Goto screen middle
L Goto screen bottom
w Go forward 1 word
3w Go forward 3 word
b Go back 1 word
3b Go back 3 word
n Repeat previous search
N Reverse previous search
x Delete one character
dw Delete one word
dd Delete one line
D Delete to end of line
d0 Delete to beginning of line
dG Delete to end of file
4dd Delete 4 lines
u Undo last change
. Do last chang
Y Yank a copy of a line
5Y Yank a copy of 5 lines
P Put below cursor
p Put above cursor
J Join next line to current
4J Join 4 lines to current
>> Shift a line right
3>> Shift 3 lines right
^d 1/2 scroll forward
^u 1/2 scroll backwards
^f Scroll forward
^b Scroll backwards
n Repeat previous search
N Reverse previous search
ZZ Write if needed & quit vi
Insert mode:
a Append after cursorA Append at line end
cw Change a word
3cw Change 3 words
C Change line
i Insert before cursor
5i Insert at 5 times
I Insert at beginning of line
o Open a linebelow cursor
O Open a line above cursor
r Replace one character
R Replace/type-cver a line
s Substitute a character
S Substitue a lin