vim编辑器技巧备忘

本文链接来自https://www.guji.work/archives/716

vim编辑器技巧备忘(初级-中级)

1. 初级

1.1 编辑模式(Insert Mode)

编辑模式包括以下动作:

insert:i在光标所在字符前插入,I在当前行首第一个非空格字符前插入

append:a在光标所在字符后插入,A在行末尾开始插入

open:o在下一行插入新行,O在光标所在行的上一行插入新行

replace:r将光标处字符替换成r紧接的字符;R一直替换字符串,知道ESC键退出,同windows下的Insert键

Ctrl+p:自动提示

[ESC]:回到普通模式

1.2 普通模式(Normal Mode)

h, j, k, l,分别对应左← 下↓ 上↑ 右→

:q, :q!, :wq 退出不保存强行退出保存退出

移动光标到当前行首/非空格,同^,:0

$ 移动光标到当前行尾,同:$

G 移动光标到文档最后一行首

30G 转到第30行,同:30

9- 光标向上移动9行,同9k

9+ 光饼向下移动9行,同9[space],9j

gg 转到文档第一行(1G)

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 查看我当前位置

1.3 命令模式

/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的高级用法,如分屏显示、分页、标签功能、代码折叠、键盘映射。

1.4 可视化模式

visual mode多用于用键盘灵活选择文本。v或V键进入,可以实现同时编辑多行(如注释)

2. 中级

2.1 高级组合命令

: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>,自动补齐功能就出现了

2.2 分屏(split)

分割窗口(同时编辑多个文件)

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为horizo​​ntal)

:set scb 分屏同步滚动

另外一种不分屏,同时编辑多个文件的方法

vi file1 file2

:ls 展示全部打开的文档。其中%代表正在打开的文件(buffer),#代表上一个编辑过的文件,a代表当前激活的buffer空间,+代表有修改过的内容但还未保存

:buffer 2 转到打开的第二个文件。或简写为:b2

:bn 转到下一个文件。没有保存不能离开这个文件。:bp上一个文件

:b# 转到上一个编辑过的文件,同:e #。类似于多屏中Ctrl+w w

:e file3 编辑一个新的文件

Ctrl+g 显示当前文件名和行号,同 :f

2.3 折叠(fold)

主要应用在复杂脚本的场合,特别是函数比较多,逻辑结构比较复杂的代码。(:help folding)

有6种方式来折叠代码

manual //手工定义折叠

indent //用缩进表示折叠

expr //用表达式来定义折叠

syntax //用语法高亮来定义折叠

diff //对没有更改的文本进行折叠

marker //用标志折叠

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” 时有效

2.4 标记

标记(mark)是vim提供的精确定位技术,只要你知道标记的名字,就可以使用命令直接跳转到该标记所在的位置。vim中的标记都有一个名字,这个名字用单一的字符表示。大写和小写字母(A-Za-z)都可以做为标记的名字,这些标志的位置可以由用户来设置;而数字标记0-9,以及一些标点符号标记,用户不能进行设置,由vim来自动设置。(:help mark-motions查看更多帮助)

ms 定义一个标记s

s` 跳转到标记s的地方

's 跳转到调剂s所在行首

.` jump to position where last change occurred in current buffer

jump back (to position in current buffer where jumped from)

:delmarks aA 使用:delmarks! 删除所有小写(az)的标记

:marks 查看所有标记

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容

  • 1. 关于Vim vim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我...
    Dyworldhua阅读 1,362评论 0 2
  • 光标移动 h 光标左移,同 <Left> 键j ...
    guanguans阅读 1,837评论 0 16
  • #########################################################...
    路峰阅读 1,040评论 0 0
  • 曾经使用了几年多的Vim,手册也翻过一遍。虽然现在不怎么用vim了,曾经的笔记还是贴出来,与喜欢vim的朋友分享。...
    Sylar丶阅读 877评论 0 0
  • 本软件尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本软件会按照本隐私权政策的规定...
    kyo2019阅读 747评论 0 0