第九章 vim编辑器

1.vi的使用

vim指令介绍

一般指令模式(command mode)

以vi打开一个文件就直接进入一般指令模式了。

编辑模式(insert mode)

在一般模式可以删除、复制等,但是不能编辑文本内容的。需要按下"i、I、o、O、a、A、r、R"任一个字母后才能进入编辑模式。

指令列命令模式(command-line mode)

在一般模式中输入": / ?"的其中一个就可以将光标移动到最底下那一行。在这个模式中,你可以读取、存盘、批量取代字符、离开vi、显示行号等动作。

1.常用的vi命令

[Ctrl] + [f]  :屏幕向下移动一页,相当于[Page Down];
[Ctrl] + [b]  :屏幕向上移动一页,相当于[Page Up];
0或[Home]键 :移动到这一行最前面到字符处;
$或[End]键 :移动到这一行最后面的字符处;
G  :光标移动到这个文件到最后一行;
gg  :光标移动到这个文件到第一行;
[n] + [Enter]/[G]  :n为数字,光标向下移动n行;
[/] + [字符]  :向光标下方寻找为"字符"的字符串;
[?] + [字符]  :向光标上方寻找为"字符"的字符串;
n  :表示重复上一个搜索的动作;
N  :与n相反,为反向进行前一个动作。例如:/stu,按下N后表示向上搜寻;
: n1,n2s/word1/word2/g  :n1、n2都是数字,表示在n1与n2行之间寻找word1这个字符串并替换为word2。如果不写n1、n2表示对当前行操作,如果是:%s/word1/word2/g表示对全文进行替换;
: n1,n2s/word1/word2/gc :同上,只不过在替换对时候需要用户确认;
x、X :在当前光标,x表示向后删除1个字符,X表示向前删除1个字符;
nx/X :n为数字,表示连续向后/向前删除n个字符;
dd  :删除光标所在对那一行;
ndd  :n为数字,删除光标所在的向下n行;
yy :复制光标所在的那一行;
nyy :n为数字,复制光标所在的向下n行;
p :p为将已复制的数据在光标的下一行粘贴;
u  :撤销,复原前一个动作;
[Ctrl] + [r] :恢复"u"撤销掉的内容;
. :重复前一个动作;
:r filename :读取一个文件filename的内容到当前文件;
:e!   :在做了很多到编辑后,可以还原到原本的文件内容;
:! [command] :不离开vim下,执行命令。例如 :! ls /home。

2.一般指令模式切换到编辑模式到可用按钮

i、I  :进入插入模式。i表示"在光标前插入",I表示在"当前所在行的第一个非空格处开始插入";
a、A :进入插入模式。a表示"在当前光标的下一个字符处开始插入",A表示"从光标所在行的最后一个字符处开始插入";
o、O :进入插入模式。o表示"在当前光标的下一行开始插入",O表示"在当前光标所在处的上一行开始插入";
r、R :进入替换模式。r表示"替换光标所在的那一个字符",R表示"一直替换光标所在的字符",按下r、R后直接输入要替换的字符即可;

3.一般指令模式切换到指令模式

:w :将编辑后的数据保存;
:w! :若文件为只读时,强制写入该文件。写入是否成功,和你的权限有关;
:q  :退出;
:q! :退出不保存;
:wq :保存并退出;
:w + [filename] :将编辑的数据另存新档;
:set nu :显示行号;
:set nonu :取消显示行号;

2.vim的暂存档、救援恢复与开启时的警告信息

当我们正在编辑文件的时候,系统宕机该怎么处理呢?

当我们使用vim编辑时,vim会在当前目录产生一个.filename.swp的文件。你对文件的编辑会被记录到这个暂存档中。

如果我们在vim一个文件的时候,出现"found a swap file by the name xxx.swp"的字样,说明可能有以下几个问题:

问题1:可能有其他人或程序同时在编辑这个文件。由于Linux是多人多任务的环境,所以很可能有很多人同时在编辑一个文件。因此vim会出现这样的警告。

解决1:让别人将他的vim结束,继续你的处理;
解决2:选择开启成为只读文件,也就是在出现警告页面输入"O"即可;

问题2:在前一vim中,因为某些特殊原因导致vim中断

解决:在警告页面你可以按下"R",此时vim会载入xxx.swp的内容。不过要注意的是xxx.swp不会自动删除,需要手动删除,否则每次打开都会出现警告。

这个警告页面有6个按钮信息:

  • [O]pen Read-Only :打开次文件为只读档。

  • [E]dit anyway :正常的方式打开你要编辑的文件,并不会载入存盘的内容,不建议使用,很容易出现多个编辑者同时修改文件的情况。

  • [R]ecover :加载暂存盘的内容。需要手动删除.swp文件。

  • [D]elete it :你确定暂存档是无用的,可以使用它把暂存档删除。

  • [Q]uit :按下q离开vim。

  • [A]bort :忽略这个编辑行为。

3.vim的其他功能

vim具有颜色显示的功能,并且支持许多程序语法。

3.1 区块选择(Visual Block)

我们怎么样搞定一个区块的范围?举个例子,有以下格式的文件:

如果我想把host1,host2等等复制以下,并加到每一行的后面怎么做?也就是每一行的结果是"192.168.1.2 host2.class.net host"。

我们可以使用区块选择,当我们在一般命令模式下按下v或者V或者[Ctrl] + v时,我们会进入区块选择模式。

区块选择的含义:

v :字符选择,会将光标经过的地方反白选择;
V : 行选择,会将光标经过的行反白选择;
[Ctrl] + v :区块选择,可以用长方形的方式选择;
y :将反白的地方复制起来;
d :将反白的地方删除掉;
p :将刚复制的区块,在光标所在处贴上;

现在来实操以下:

1.使用vim xxx.txt打开文件;
2.使用光标移动到第一行到host的h处,然后按下[ctrl] + v,进入Visual Block模式;
3.将光标移动到最底部,此时光标移动过到区域会反白;
4.此时按下y进行复制,反白的地方会消失;
5.将光标移动到第一行的最右边,用编辑模式向后按两个空格键,回到一般命令模式后,按下p进行粘贴;

3.2 多文件编辑

相关的按键有:

:n :编辑下一个文件
:N :编辑上一个文件
:files :列出当前这个vim开启的所有文件

如果想要将刚刚的xxx.txt文件的IP复制到你到/etc/hosts文件中,该怎么操作呢?

1.通过"vim xxx.txt /etc/hosts"指令打开两个文件;
2.在vim中使用":files"查看编辑的文件有哪些,然后按下任意键回到一般命令模式中;
3.在第一行输入"4yy"复制4行;
4.在vim环境下输入":n"会来到第二个编辑的文件;
5.在/etc/hosts文件中按下"G"到最后一行,再按下"p"粘贴;
6.按下多次的"u"来还原原本的文件数据;
7.按下":q"退出;

3.3 多窗口功能

相关功能键:

:sp [filename] :开启一个新窗口。如果想要在新窗口打开另一文件,就加入filename。否则只输入":sp"时,出现的时同一个文件在两个窗口。
[Ctrl] + w + ↓ :注意,按键的按法是:先按下[Ctrl]不放,再按下w后放开所有的按键,然后再按下向下箭头,则可移动到下方到窗口。
[Ctrl] + w + ↑ :同上,光标移动到上面到窗口。
[Ctrl] + w + q :结束当前的窗口。

3.4 vim的挑字补全功能

相关的功能键:

注意:以下的用法都在在插入模式下,输入开头字母在使用以下操作。
[Ctrl] + x -> [Ctrl] + n :通过目前正在编辑的这个"文件的内容文字"作为关键词,补充补齐。
[Ctrl] + x -> [Ctrl] + f :以当前目录内的"文件名"作为关键词,补充补齐。
[Ctrl] + x -> [Ctrl] + o :以扩展名作为语法补充,以vim内建的关键词,补充补齐。

3.5 vim环境设定与记录 ~/.vimrc ~/.viminfo

当我们重复编辑同一个文件,第二次进入文件时,光标就在上次离开的那一行上。为什么会这样?

因为vim会主动将你曾经做过的行为记录下来,记录动作的文件就是:~/.viminfo。

而对vim文件环境的设定,就是编辑~/.vimrc了。以下时vim常见的环境设定参数:

:set nu/nonu :设定与取消行号;
:set hlsearch/nohlsearch :设定是否将搜索的字符串反白;
:set autoindent/noautoindent :设定是否自动锁进;
:set backup :设定是否自动储存备份档。一般是nobackup。
:set ruler :设定是否显示右下角的一些状态栏;
:set showmode :是否要显示"INSERT"之类的左下角的状态栏;
:set backspace=(012) :如果backspace为0或1时,在进入编辑模式后仅能删除刚刚输入的字符,设为2时,可以删除任意值;
:set all :显示目前所有的环境参数设定值;
:set :显示与系统默认值不同的设定参数;
:syntax on/off :是否依据程序相关语法显示不同的颜色;
:set bg=dark/light :设定主题颜色;

以上可以在文件的一般命令模式下设定,如果在~/.vimrc文件中设定的话,去掉":"即可。

.vimrc文件配置

4.vim的使用注意事项

4.1 中文编码问题

关于乱码,你需要考虑以下:

  • 你的Linux系统默认支持的语言数据:这与/etc/locale.conf有关;

  • 你的终端的语言:这与LANG、LC_ALL属性有关;

  • 你的文件原本的编码;

  • 开启终端机的软件;

4.2 DOS与Linux下编码的不同

我们在DOS下的文件使用在Linux下面,就执行不了了。怎么做?

可以下载dos2unix包。

4.3 语言编码转换:iconv

指令介绍:

[~] iconv --list 
[~] iconv -f 原本编码 -t 新编码 filename [-o newfile]

选项与参数:
--list :查看所有支持的编码;
-f :from,原本编码;
-t :to,新编码;
-o file :如果想保留原文件,使用-o + 新档名,可以建立新编码文件;

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

推荐阅读更多精彩内容

  • vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,...
    Li77159阅读 575评论 0 2
  • 编辑器之神——vim编辑器 一、vi介绍 Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windo...
    白色衬衫_f48d阅读 740评论 0 0
  • 编辑器之神——vim编辑器 一、vi介绍 Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windo...
    予爷阅读 666评论 0 0
  • 在老家这个地方,对于小名(乳名)是忌讳颇深的。成人的小名晚辈是万万不可喊的。 前些日子参加了一个祭奠老人十...
    明乐永余阅读 372评论 0 0
  • ❤ 翻喜欢的一个小网红的微博,发现了一个旧友的评论上了热门,想起自己好久没有和她有过联系,久到都忘了曾经我们那么好...
    周乐乐_阅读 778评论 7 16