设为首页 收藏本站
查看: 1866|回复: 0

[经验分享] vim编辑器

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-12-6 09:34:25 | 显示全部楼层 |阅读模式
                                                官网 http://www.vim.org/
一,vi与vim
1,为何要学vim?
a)所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在;
b)很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
c)vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
d)因为程序简单,编辑速度相当快速。
vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来显示一些特殊的信息;
vim 会依据文件的扩展名或者是文件内的开头信息, 判断该文件的内容而自动的呼叫该程序的语法判断式,再以颜色来显示程序代码与一般信息;
vim 里面加入了很多额外的功能,例如支持正则表达式的搜寻架构、多文件编辑、区块复制等等

二, vi 的使用
vi 共分为三种模式,分别是『一般指令模式』、『编辑模式』与『指令列命令模式』
a)一般指令模式 (command mode)
以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模
式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整列』来处
理文件内容, 也可以使用『复制、贴上』来处理你的文件数据
b)编辑模式 (insert mode)
在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到
你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux
中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进
行编辑。而如果要回到一般指令模式时, 则必须要按下『Esc』这个按键即可退出编辑模式
c)指令列命令模式 (command-line mode)
在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一列。在
这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显
示行号等等的动作则是在此模式中达成的!
C:/Users/wpf/AppData/Local/YNote/data/qqDDF612C8ED77A7982F28C6F1290CC1BC/0eb779c81b5a4ea5b9f7861e46955dec/clipboard.png watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
注:一般指令模式可与编辑模式及指令列模式切换, 但编辑模式与指令列模式之间不可互相切换

1,简易执行范例
(1)使用『 vi filename 』进入一般指令模式
/bin/vim welcome.txt
打开后分为实际内容和状态信息行
(2)按下 i 进入编辑模式,开始编辑内容
a)在一般指令模式之中,只要按下 i, o, a 等字符就可以进入编辑模式
b)可以发现在左下角状态栏中会出现 –INSERT- 的字样,这个时候,键盘上除了 [Esc] 这个按键之外,其他的按键都可以视作为一般的输入按钮了
(3)按下 [ESC] 按钮回到一般指令模式
(4)进入指令列模式,保存文件并离开 vi 环境
保存 (write) 并离开 (quit) 的命令很简单,输入『:wq』即可保存退出! (按下 : 该光标就会移动到最底下一列去!

2,按键说明
(1)第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等
a)移动光标的方法
h 或 向左箭头键(←)                光标向左移动一个字符
j 或 向下箭头键(↓)                    光标向下移动一个字符
k 或 向上箭头键(↑)                   光标向上移动一个字符
l 或 向右箭头键(→)                  光标向右移动一个字符
注:进行多次移动,例如向下移动 30 列,可以使用 "30j" 或 "30↓" 的组合按键
[Ctrl] + [f]                                    屏幕向下移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] +                                    屏幕向上移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]                                   屏幕向下移动半页
[Ctrl] +                                    屏幕向上移动半页
+                                                  光标移动到非空格符的下一列
-                                                   光标移动到非空格符的上一列
n<space>                                  n为数字,按下数字后再按空格键,光标会向右移动这一列的 n个字符
0或功能键[Home]                    移动到这一列的最前面字符处 (常用)
$ 或功能键[End]                       移动到这一列的最后面字符处(常用)
H                                                光标移动到这个屏幕的最上方那一列的第一个字符
M                                                光标移动到这个屏幕的中央那一列的第一个字符
L                                                 光标移动到这个屏幕的最下方那一列的第一个字符
G                                                移动到这个文件的最后一列(常用)
nG                                              n 为数字。移动到文件的第 n 列。例如 20G 则会移动到文件的第 20 列(可配合 :set nu)
gg                                               移动到这个文件的第一列! (常用)
n<Enter>                                   n 为数字。光标向下移动 n 列(常用)
b)查找与替换
/word                                         向光标之下寻找一个名称为 word 的字符串
?word                                        向光标之上寻找一个字符串名称为 word 的字符串。
n                                                重复前一个搜寻的动作。
N                                                与 n 刚好相反,为『反向』进行前一个搜寻动作
:n1,n2s/word1/word2/g         在第 n1 与 n2 列之间寻找 word1 这个字符串,并将该字符串取代为 word2
:1,$s/word1/word2/g              从第一列到最后一列寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc           在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
c)删除、复制与粘贴
x, X         x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx           n 为数字,连续向后删除 n 个字符。
dd           删除游标所在的那一整列(常用)
ndd         n 为数字。删除光标所在的向下 n 列 (常用)
d1G        删除光标所在到第一列的所有数据
dG          删除光标所在到最后一列的所有数据
d$           删除游标所在处,到该列的最后一个字符
d0           那个是数字的 0 ,删除游标所在处,到该列的最前面一个字符
yy            复制游标所在的那一列(常用)
nyy          n 为数字。复制光标所在的向下 n 列(常用)
y1G        复制光标所在列到第一列的所有数据
yG          复制光标所在列到最后一列的所有数据
y0           复制光标所在的那个字符到该列行首的所有数据
y$           复制光标所在的那个字符到该列行尾的所有数据
p, P         p 为将已复制的数据在光标下一列贴上,P 则为贴在游标上一列!(常用)
J              将光标所在列与下一列的数据结合成同一列
c              重复删除多个数据,例如向下删除 10 列,[ 10cj ]
u              复原前一个动作。(常用)
[Ctrl]+r    重做上一个动作。(常用)
.               重复前一个动作的意思 (常用)
(2)第二部份:一般指令模式切换到编辑模式的可用的按钮说明
a)进入插入或替换的编辑模式
i, I         进入插入模式(Insert mode):i 为光标所在处插入, I 为在所在列的第一个非空格符处开始插入。
a, A      进入插入模式(Insert mode):a 为光标所在的下一个字符处插入, A 为从光标所在列的最后一个字符处插入。
o, O      进入插入模式(Insert mode):o 光标所在的下一列处插入新的一列; O 在光标所在处的上一列插入新的一列!
r, R       进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下 ESC为止;(常用)
[Esc]       退出编辑模式,回到一般指令模式中(常用)
(3)第三部份:一般指令模式切换到指令列模式的可用按钮说明
a)指令列模式的保存、离开等指令
:w           将编辑的数据写入硬盘文件中(常用)
:w!          若文件属性为『只读』时,强制写入该文件。
:q            离开 vi (常用)
:q!           为强制离开不储存文件。
:wq         保存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ           若文件没有更动,则不保存离开,若文件已经被更动过,则保存后离开!
:w [filename]     将编辑的数据储存成另一个文件(类似另存新文件)
:r [filename]       在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到游标所在列后面
:n1,n2 w [filename]             将 n1 到 n2 的内容储存成 filename 这个文件。
:! command                           暂时离开 vi 到指令列模式下执行 command 的显示结果!
b)vim 环境的变更
:set nu                显示行号,设定之后,会在每一列的前缀显示该列的行号
:set nonu           与 set nu 相反,为取消行号!

3,一个案例练习
http://linux.vbird.org/linux_basic/0310vi/man_db.conf
忽略

4,vim  的暂存档、救援回复与开启时的警告讯息
在使用 vim 编辑时, vim 会在与被编辑的文件的目录下,再建立一个名为 .filename.swp 的文件;
vim提示两点主要的问题与解决方案:
问题一 :可能有其他人或程序同时在编辑这个文件
解决方法:
a)找到另外那个程序或人员,请他将该 vim 的工作结束,然后你再继续处理。
b)如果你只是要看该文件的内容并不会有任何修改编辑的行为,那么可以选择开启成为只读(O)文件,
问题二:在前一个 vim 的环境中,可能因为某些不知名原因导致 vim 中断 (crashed)
解决方法:
a)如果你之前的 vim 处理动作没有保存,此时你应该要按下『R』,亦即使用 (R)ecover 的项目, 此
时 vim 会载入 .man_db.conf.swp 的内容,那个 .man_db.conf.swp 并不会在你结束 vim 后自动删除,
所以你离开 vim 后还得要删除 .man_db.conf.swp 才能避免每次打开这个文件都会出现这样的警告!
b)如果你确定这个暂存盘是没有用的,那么你可以直接按下『D』删除掉这个暂存盘,亦即 (D)elete it
这个项目即可。 此时 vim 会载入 man_db.conf ,并且将旧的 .man_db.conf.swp 删除后,建立这
次会使用的新的 .man_db.conf.swp !
暂存盘警告讯息的画面中,有出现六个可用按钮,各按钮的说明如下:
a)[O]pen Read-Only:打开此文件成为只读文件
b)(E)dit anyway:还是用正常的方式打开你要编辑的那个文件, 并不会载入暂存盘的内容,容易出现冲突。
c) (R)ecover:就是加载暂存盘的内容,用在你要救回之前未保存的内容。 需要手动自行删除那个暂存档!
d) (D)elete it:删除暂存文件
e)(Q)uit:按下 q 就离开 vim ,不会进行任何动作回到命令提示字符。
f) (A)bort:忽略这个编辑行为,感觉上与 quit 非常类似! 也会回到命令提示字符!

三,vim  的额外功能
1,区块选择(Visual Block)
区块选择的按键意义
v                字符选择,会将光标经过的地方反白选择!
V               列选择,会将光标经过的列反白选择!
[Ctrl]+v     区块选择,可以用长方形的方式选择资料
y                将反白的地方复制起来
d               将反白的地方删除掉
p               将刚刚复制的区块,在游标所在处贴上!

2,多文件编辑
多文件编辑的按键
:n         编辑下一个文件
:N        编辑上一个文件
:files    列出目前这个 vim 的开启的所有文件

3,多窗口功能
多窗口情况下的按键功能
:sp [filename]                    开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新文件,否则表示两个窗口
                                           为同一个文件内容(同步显示)。
[ctrl]+w+ j  [ctrl]+w+↓       按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向
                                           下箭头键),则光标可移动到下方的窗口。
[ctrl]+w+ k   [ctrl]+w+↑      同上,不过光标移动到上面的窗口。
[ctrl]+w+ q                         其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+
                                            ↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊!

4,vim  的挑字补全功能
组合按钮                             补齐的内容
[ctrl]+x -> [ctrl]+n                通过目前正在编辑的这个『文件的内容文字』作为关键词,予以补齐
[ctrl]+x -> [ctrl]+f                 以当前目录内的『文件名』作为关键词,予以补齐
[ctrl]+x -> [ctrl]+o                以扩展名作为语法补充,以 vim 内建的关键词,予以补齐

5, vim  环境设定与记录: ~/.vimrc, ~/.viminfo
vim 的环境设定参数
:set nu   :set nonu                            设定与取消行号!
:set hlsearch    :set nohlsearch      hlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜寻的字符串
                                                             反白的设定值。默认值是 hlsearch
:set autoindent  :set noautoindent      是否自动缩排?autoindent 就是自动缩排。
:set backup                                        是否自动储存备份档?一般是 nobackup 的
:set ruler                                            右下角的一些状态栏说明 ,ruler 是显示或不显示该设定值!
:set showmode                                是否要显示 --INSERT-- 之类的字眼在左下角的状态栏。
:set backspace=(012)                    一般来说, 如果我们按下 i 进入编辑模式后,可以利用退格键 (backspace) 来删除任
                                                           意字符的。 但是,某些 distribution 则不许如此。此时,我们就可以透过 backspace
                                                           来设定啰~ 当 backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可删除刚刚
                                                           输入的字符, 而无法删除原本就已经存在的文字了!
:set all                                               显示目前所有的环境参数设定值。
:set                                                     显示与系统默认值不同的设定参数, 一般来说就是你有自行变动过的设定参数啦!
:syntax on  :syntax off                    是否依据程序相关语法显示不同颜色
:set bg=dark  :set bg=light             可用以显示不同的颜×××调,预设是『 light 』

6,vim 常用指令示意图
C:/Users/wpf/AppData/Local/YNote/data/qqDDF612C8ED77A7982F28C6F1290CC1BC/43b99a5bcfba4970bf05df3472a90c47/clipboard.png watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg

四,其他 vim  使用注意事项
1,中文编码的问题
a)Linux 系统默认支持的语系数据: /etc/locale.conf ;
b)终端界面 (bash) 的语系: LANG, LC_ALL;
c)文件原本的编码;
d)开启终端机的软件,例如在 GNOME 底下的窗口接口。

2,DOS  与 Linux 的换行字符
  dos2unix [-kn] file [newfile]
  unix2dos [-kn] file [newfile]
选项与参数:
-k :保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间)
-n :保留原本的旧档,将转换后的内容输出到新文件,如: dos2unix -n old new

3,语系编码转换
  iconv  --list
  iconv -f  原本编码 -t  新编码 filename [-o newfile]
选项与参数:
--list :列出 iconv 支持的语系数据
-f :from ,亦即来源之意,后接原本的编码格式;
-t :to ,亦即后来的新编码要是什么格式;
-o file:如果要保留原本的文件,那么使用 -o 新档名,可以建立新编码文件。

五,重点回顾
1,Linux 底下的配置文件多为文本文件,故使用 vim 即可进行设定编辑;
2, vim 可视为程序编辑器,可用以编辑 shell script, 配置文件等,避免打错字;
3,vi 为所有 unix like 的操作系统都会存在的编辑器,且执行速度快速;
4,vi 有三种模式,一般指令模式可变换到编辑与指令列模式,但编辑模式与指令列模式不能互换;
5,常用的按键有 i, [Esc], :wq 等;
6,vi 的画面大略可分为两部份,(1)上半部的本文与(2)最后一行的状态+指令列模式;
7,数字是有意义的,用来说明重复进行几次动作的意思,如 5yy 为复制 5 列之意;
8,光标的移动中,大写的 G 经常使用,尤其是 1G, G 移动到文章的头/尾功能!
9,vi 的取代功能也很棒! :n1,n2s/old/new/g 要特别注意学习起来;
10,小数点『 . 』为重复进行前一次动作,也是经常使用的按键功能!
11,进入编辑模式几乎只要记住: i, o, R 三个按钮即可!尤其是新增一列的 o 与取代的 R
12,vim 会主动的建立 swap 暂存档,所以不要随意断线!
13,如果在文章内有对齐的区块,可以使用 [ctrl]-v 进行复制/贴上/删除的行为
14,使用 :sp 功能可以分区窗口
15,若使用 vim 来撰写网页,若需要 CSS 元素数据,可透过 [crtl]+x, [crtl]+o 这两个连续组合按键来取得关键词
16,vim 的环境设定可以写入在 ~/.vimrc 文件中;
17,可以使用 iconv 进行文件语系编码的转换
18,使用 dos2unix 及 unix2dos 可以变更文件每一列的行尾断行字符。


                                       


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421067-1-1.html 上篇帖子: linux系统查看分区文件系统 下篇帖子: rsync文件同步工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表