vim基础操作

vim: filetype=markdown

vi / vim 基本操作

vi/vim 共分为三种模式:分别是命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode)

[命令模式]:

用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:

    i   切换到插入模式,以输入字符。  
    i   在光标左侧插入正文  
    a   在光标右侧插入正文  
    o   在光标所在行的下一行增添新行  
    O   在光标所在行的上一行增添新行  
    I   在光标所在行的开头插入  
    A   在光标所在行的末尾插入  
    u   撤消前一条命令的结果;  
    .   重复最后一条修改正文的命令。  

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

    :   切换到底线命令模式,以在最底一行输入命令。

[缩进]

随便输入几行文字,移动光标到第一行,然后在命令模式下输入

    3>>   光标下3行右移  
    3<<   光标下3行左移    
    set expandtab   输入tab时自动将其转化为空格   

[保存退出]

    w   保存;or w filename 另存为 (:w file 将编辑的内容写入 file 文件,保持原有文件的内容不变)  
    q   在未作修改的情况下退出;  
    q!  放弃所有修改,退出编辑程序。  
    wq or ZZ  保存退出(zz不保存空文件)  

部分保存

    :a,bw file            将第 a 行至第 b 行的内容写入 file 文件
    :345                  将光标移到第 345 行  
    :345w file            将第 345 行写入 file 文件  
    :3,5w file            将第 3 行至第 5 行写入 file 文件  
    :1,.w file            将第 1 行至当前行写入 file 文件  
    :.,$w file            将当前行至最后一行写入 file 文件  
    :.,.+5w file          从当前行开始将 6 行内容写入 file 文件  
    :1,$w file            将所有内容写入 file 文件,相当于 :w file 命令  

读取和编辑

    :r file            读取 file 文件的内容,插入当前光标所在行的后面  
    :e file            编辑新文件 file 代替原有内容  
    :f file            将当前文件重命名为file(修改的内容保存在新文件,源文件不变)  
    :f                 打印当前文件名称和状态,如文件的行数、光标所在的行号等  

[查找和替换]

    : .,$ s/str1/str2/g    用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1  
    : 1,$ s/str1/str2/g    用字符串 str2 替换正文中所有出现的字符串 str1   

g 放在命令末尾,表示对搜索字符串的每次出现进行替换,不止匹配每行中的第一次出现;不加g,表示只对搜索字符串的首次出现进行替换;
s 表示后面跟着一串替换的命令;
% 表示替换范围是所有行,即全文。
gc 表示对每一处替换进行确认(反白显示的是当前需要确认项)

[Shell切换]

    :!shell_command   执行完 shell_command 后回到Vim  
    这称为Shell切换。它允许执行任何可以在标准的Shell提示符下执行的命令。当这条命令执行完毕,控制返回给编辑程序。又可以继续编辑对话过程。  

[分屏]

    :split(可用缩写 :sp) 上下分屏。后面跟已经存在的文件名则打开该文件。
    :vsplit(可用缩写 :vsp)  左右分屏。 后面跟已经存在的文件名则打开该文件。 
    :new = sp
    :vnew = vsp  
    Ctrl+w+h    切换到当前分屏的左边一屏;  
    Ctrl+w+l    切换到当前分屏的右边一屏;  
    Ctrl+w+j    切换到当前分屏的下方一屏  
    Ctrl+w+w    来跳转分屏,不过跳转方向则是在当前Vim窗口所有分屏中,按照逆时针方向跳转  

[分屏窗口大小调整]

    ctrl-w + 增加一行   - 减少一行  
           > 宽增加     < 宽减少  

[标签页]

Vim的标签(Tab)页,类似浏览器的标签页,一个标签页打开一个Vim的窗口,一个Vim的窗口可以支持N个分屏。
在Vim中新建一个标签的命令是:
:tabnew

如果要在新建标签页的同时打开一个文件,则可以在命令后面直接附带文件路径:
:tabnew filename

Vim中的每个标签页有一个唯一的数字序号,第一个标签页的序号是0,从左向右依次加一。

[可视模式]

    v,V,<C-v>(在Windows下应该是<C-q>)  
    J → 把所有的行连接起来  
    < 或 >   左右缩进  
    =        自动给缩进   

[vim帮助]

    在vim的安装目录下,有一个vimtutor.bat的中文帮助文件  

[vim配置]

配色:

    菜单->编辑->启动设定  或者直接编辑_vimrc文件   
    写入 colo evening   evening是配色名,也就是vim_root/color/evening.vim文件。可以从网上下载配色文件,然后放到这个目录下即可。  

字体大小:

    Linux/Unix命令格式:set guifont=字体 +\+空格 + 字体大小  
    Windows/Mac命令格式:set guifont=字体 + : + 字体大小  

相同的是,两个系统对空格都需要使用反斜杠\进行转意。
不同的是,关于字体大小的表述。Linux/Unix字体大小直接写字号,Windows/Mac字号需要加上h的高度名。
实例:set guifont=幼圆:h10

关于命令和对象

许多改变文本的命令都由一个操作符和一个动作构成。
使用删除操作符 d 的删除命令的格式如下:

    d   motion  

其中:
d - 删除操作符。
motion - 操作符的操作对象(在下面列出)。
一个简短的动作列表:
w - 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。
e - 从当前光标当前位置直到单词末尾,包括最后一个字符。
$ - 从当前光标当前位置直到当前行末。
因此输入 de 会从当前光标位置删除到单词末尾。

特别提示:
对于勇于探索者,请在正常模式下面仅按代表相应动作的键而不使用操作符,您
将看到光标的移动正如上面的对象列表所代表的一样。

[执行外部命令]

    输入 :! 然后紧接着输入一个外部命令可以执行该外部命令  
    例如:!dir   
    提示:您还可以读取外部命令的输出。例如, :r !ls 可以读取 ls 命令的输出,并把它放置在光标下面。  

[关于Backspace按键]

In insert mode, to allow the backspace key to erase previously entered characters, autoindent, and newlines, set the following option:
:set backspace=indent,eol,start
Or
:set backspace=2

By default this option is empty, not allowing you to backspace over characters that weren't entered during the current insert mode session, the automatically inserted indentation, or across line breaks. This is the standard vi behavior.

在插入模式,允许Backspace键删除先前输入的字符,自动缩进,和换行、设置以上选项:
默认情况下,此选项是空的,不允
许你进入插入模式删除不是当前会话期间的字符(你可以删除本次你键入的字符,用backspace按键。

命令补全

    例如输入: :e  接着按 CTRL-D 键,Vim 会显示以 e 开始的命令的列表。  

文件格式和类型

    查看文件格式: *:set fileformat*  或者用 *set ff=unix* 设置  
    查看文件类型: *:set filetype*      
    设置文件类型: *:set filetype=markdown* 一个.txt文件的filetype设置为markdown,就和普通的markdown文件同样的显示效果(.md)  
    另一种方式就是在文件内容中指定,Vim会从文件的头几行自动扫描文件是否有声明文件的类型的代码,如在文件的行首加入# vim:filetype=python(这里用中文冒号进行了替换,不然vim仍然会识别到这一行,会报错 :) ),Java文件变通的做法:/* vim:filetype=java */,总之就是把这行当作注释,以致于不影响文件的编译,这样Vim不通过文件名也能检测出文件是什么类型了。  

折叠

vim 提供 6中折叠方式
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠

设置方法:可用选项 'foldmethod' 来设定折叠方式:set fdm=6选1
注意,每一种折叠方式不兼容,即:你不能用expr又用marker方式。

禁用折叠:
set nofoldenable

以手工定义折叠为例:
zf 创建折叠,比如在正常模式下,输入zf然后回车,就折叠当前行和下一行。输入zf的时候,vim右下角能看到输入提示。
zE 除去删除 (Eliminate) 窗口里“所有”的折叠。 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zd 删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zo 打开光标下的折叠
zc 关闭光标下的折叠
zR 打开所有折叠
zM 关闭所有折叠
zf56G 从当前行折叠到56行,方向前后均可,例如可以 zf1G
10zf 创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],等)。

vim 行位加2个空格

    因为Markdown的换行格式为2个回车或者行位2个空格,故在普通编辑完文本后,使用替换命令在行尾加2个空格,以符合Markdown语法。  
    :%s/\n/  /r\g

特殊字符

  • 查看vim所有可输入的特殊字符
    :help digraph-table
  • 输入特殊字符:<ctrl-q>字符编码 linux是 ctrl-v
  • 显示当前文件的二进制编码:
    :%!xxd 恢复: %!xxd -r
  • 转义字符: 一些特殊字符,在使用的时候需要转义,使用 \ ,比如: [ $ % # ]等

Tab键和空格互换

对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
TAB替换为空格:
:set ts=4
:set expandtab
:%retab!

    空格替换为TAB:  
    :set ts=4  
    :set noexpandtab  
    :%retab!  

加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。

update: 2017/09/05 周二

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

推荐阅读更多精彩内容

  • vim是从 vi 发展出来的一个文本编辑器 。代码补完、编译及错误跳转等方便编程的功能特别丰富 进入插入模式: i...
    liudai123阅读 258评论 0 0
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,016评论 9 467
  • 目录(?)[-] 关于Vim 1 Vim的几种模式 启动Vim 文档操作 光标的移动 1 基本移动 2 翻屏 3 ...
    SunnyLeong阅读 8,598评论 0 32
  • 一.(未成年篇) 青春在哪里呀?青春在哪里?青春在那一睡着就近乎昏迷的被窝里。 青春在哪里呀?青春在哪里?青春在那...
    青青橙阅读 597评论 5 1
  • 神出鬼没的掏出手机给你打电话,你噗嗤一笑,揶揄道“呀,怎么突然想起给我打电话了喏”我静静的听着在离我一千多公里的地...
    戴小妙阅读 241评论 0 1