“学习vim而且其会成为你最后一个使用的文本编辑器”
学习建议:html
首先来一张 mindmap :shell
编辑模式包括如下动做:vim
i
在光标所在字符前插入,I
在当前行首第一个非空格字符前插入a
在光标所在字符后插入,A
在行末尾开始插入o
在下一行插入新行,O
在光标所在行的上一行插入新行r
将光标处字符替换成r紧接的字符;R
一直替换字符串,知道ESC
键退出,同windows下的Insert键Ctrl+p
:自动提示[ESC]
:回到普通模式h, j, k, l
,分别对应 左← 下↓ 上↑ 右→ :q, :q!, :wq
退出 不保存强行退出 保存退出segmentfault
移动光标到当前行首/非空格,同^,:0windows
$
移动光标到当前行尾,同:$G
移动光标到文档最后一行首30G
转到第30行,同 :309-
光标向上移动9行,同9k9+
光饼向下移动9行,同9[space],9jbash
gg
转到文档第一行(1G)app
H
移动到屏幕的第一列M
移动到屏幕的中间列L
移动到屏幕的最后列编辑器
w
移动到下一个单词的首字母,(标点符号认为是一个单词,W表示单词以空格分隔)函数
e
移动到下一个单词的末尾,(E认为单词以空格分隔)学习
b
移动到上一个单词的首字母,(B认为单词以空格分隔)
fx
移动到下一个字母是x的位置。Fx向上移动。%
匹配括号移动,包括 (, {, [ ,你须要把光标先移到括号上
CTRL+b
向上(前)翻页
CTRL+f
向后翻页
d
删除开始。实际上是放到寄存器中,p或P命令调用。c即change,删完进入编辑模式
d$
删除光标到行尾的全部文字,同D。C指令进入编辑模式dw
删除当前字符到单词尾的全部字符。cw删除光标后的单词并进入插入模式,等同替换dd
删除当前一行2dd
删除当前两行x
剪切光标处字符,能够p粘贴出来
y
复制开始。yank起来,p或P命令调用
yy p
复制当前行并粘贴到下一行5yy p
复制当前行如下5行,在合适的地方粘贴yw p
复制一个单词并粘贴。yi{
复制光标所在{}中的内容。很容易知道ci{ 和 di " 的意思。
u
撤销
CTRL+r
重作.
点号重复作上一个命令``.` 移动光标到上一次的修改点
Ctrl+g
查看我当前位置
/word
向下查找word,n定位到下一个。?word 向上开始查找,同/word配合N。*直接查找光标所在处单词:%s/word1/word2/g
替换全部word1为word2(^$ []):set noic
区分大小写 (即set no igorecase,set ic不区分大小写)
:set nu
显示行号。:set nonu相反,不显示行号
:set paste
设置为粘贴模式,解决Ctrl+Insert粘贴时缩进错乱问题。:set nopaste设置回默认:se ff=unix
设置文本文件的格式为unix,去掉windows系统文件中的^M。
:!ls
执行bash下的命令ls,回车后继续回到vi。通常在一个不存在的目录中建立文件时用到
:set all
查看vim说有设置属性值:map
查看绑定的快捷键:marks
查看可用标记熟练上面的命令,已经能够知足平常工做要求,要提升效率能够学习vim的高级用法,如分屏显示、分页、标签功能、代码折叠、键盘映射。
visual mode多用于用键盘灵活选择文本。v
或V
键进入,能够实现同时编辑多行(如注释)
:sh
暂时离开vi,进入shell命令行:!ls
!表示要执行一个shell命令q:
调出历史命令窗口cc
替换一行,清空一行cw
替换一个单词,进入插入模式ea
在当前单词最后插入
vw
visual模式选择一个单词
VU
全选一行,转换成大写:5,12 co 13
将5至12行复制到第13行下
gg=G
自动缩排文件%
: 匹配括号移动,包括 (, {, [. ,你须要把光标先移到括号上*
和 #
:匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
当光标在( )
, [ ]
,< >
, { }
, " "
, ''
内时,能够用ci
, di
, 或yi
,加上(
, [
, <
,{
, "
, '
。这样能够改写/删除/复制( )
内,[ ]
内,< >
内,{ }
内," "
内,' '
内的内容。
多行注释(块操做)
esc
进入命令行模式下,按下Ctrl + v
,进入列(也叫区块)模式;kj
选择须要注释的多行;I
键,进入插入模式;esc
键删除多行开头的一个字符与此相似,删除多个字符也只要左右键,而后使用d。
另一种多行注释的方式就是替换:
:5,9s/^/#/g
添加注释#:5,9s/^#//g
删除注释#:5,9s#^#//#g
添加注释//,同:5,9s/^/\/\/#/g:5,9s#^//##g
删除注释//多行缩进[ESC]
, Ctrl+v
选择行 <或>左右缩进,=自动缩进(gg=G的局部功能)
多行行末尾加上 >> ${log}:Ctrl+v /^echo>>
至关于tab键,一个缩进
多行删除
set nu
显示行号;:32,65d
,回车键,32-65行就被删除了自动补全
在Insert模式下,你能够输入一个词的开头,而后按 <C-p>
或是<C-n>
,自动补齐功能就出现了
分割窗口(同时编辑多个文件)
vi -o file1 file2
水平分屏,也能够在先打开file1后,使用:sp file2
vi -O file1 file2
垂直分屏,也能够在先打开file1后,使用:vsp file2
Ctrl+w w
光标切换到另外一个屏k
关闭当前窗口,若是有改动则提示要先保存。:wqa!
保存退出全部文件Ctrl+w v
左右分割当前打开的文件。Ctrl+w s
上下分割显示Ctrl+w H
左移该屏(大写,L
右移,K
上移—改变vertical为horizontal):set scb
分屏同步滚动另一种不分屏,同时编辑多个文件的方法
vi file1 file2
:ls
展现所有打开的文档。其中 %
表明正在打开的文件(buffer),#
表明上一个编辑过的文件,a
表明当前激活的buffer空间,+
表明有修改过的内容但还未保存:buffer 2
转到打开的第二个文件。或简写为 :b2
:bn
转到下一个文件。没有保存不能离开这个文件。:bp
上一个文件:b#
转到上一个编辑过的文件,同 :e #
。相似于多屏中Ctrl+w w
:e file3
编辑一个新的文件 Ctrl+g
显示当前文件名和行号,同 :f
主要应用在复杂脚本的场合,特别是函数比较多,逻辑结构比较复杂的代码。(:help folding
)
有6种方式来折叠代码
indent:set foldmethod=indent
设置缩进折叠,fdm为简写。只对当前会话有效,要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=indent
zc
折叠与当前缩进相同的行zo
打开折叠zj
移到下一个折叠处zk
移到上一个折叠处zm
折叠全部可折叠标记zr
展开全部折叠[z
到当前打开折叠的开始]z
到当前打开折叠的结束marker
注意与后文的mark不是同一东西,:set fdm=marker
zf
建立marker,默认 #{{{
,#}}}
Ctrl+v zf
进入可视化模式,选择须要折叠的行,zc执行折叠。会自动加入 #{{{
code block #}}}
zf9j
建立从当前行起至如下9行的折叠标记,zc
进行折叠。同9zf
。相似有zf30G
,从当前行折叠刀第30行zf%
建立匹配的 {}
, []
, ()
, <>
的fold。不用执行zc
zd
删除当前行上存在的折叠标记。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效标记(mark)是vim提供的精肯定位技术,只要你知道标记的名字,就可使用命令直接跳转到该标记所在的位置。vim中的标记都有一个名字,这个名字用单一的字符表示。大写和小写字母(A-Za-z)均可以作为标记的名字,这些标志的位置能够由用户来设置;而数字标记0-9,以及一些标点符号标记,用户不能进行设置,由vim来自动设置。(:help mark-motions查看更多帮助)
ms
定义一个标记s待续
.vimrc 是目前本身用的比较习惯的vim风格。
参考