热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第十章vim的额外功能

其实,目前大部分的distributions都以vim取代vi的功能了!如果你使用vi后,却看到画面的右下角有显示目前光标所在的行列号码,那么你的vi已经被vim所取代啰~为
其实,目前大部分的 distributions 都以 vim 取代 vi 的功能了!如果你使用 vi 后,却看到画面的右下角有显示目前光标所在的行列号码,那么你的 vi 已经被 vim 所取代啰~ 为什么要用 vim 呢? 因为 vim 具有颜色显示的功能,并且还支持许多的程序语法 (syntax), 因此,当你使用 vim 编辑程序时( 不论是 C 语言,还是 shell script ), 我们的 vim 将可帮你直接进行『程序除错 (debug)』的功能!真的很不赖吧!^_^

如果你在文本模式下,输入 alias 时,出现这样的画面:

[root@www ~]# alias
....其他省略....
alias vi='vim' <==重点在这行啊!


这表示当你使用 vi 这个指令时,其实就是执行 vim 啦!如果你没有这一行,那么你就必须要使用 vim filename 来启动 vim 啰!基本上, vim 的一般用法与 vi 完全一模一样~没有不同啦!那么我们就来看看 vim 的画面是怎样啰!假设我想要编辑 /etc/man.config ,则输入『vim /etc/man.config』

tu

上面是 vim 的画面示意图,在这个画面中有几点特色要说明喔:

由于 man.config 是系统规划的配置文件,因此 vim 会进行语法检验,所以你会看到画面中1.内部主要为深蓝色, 且深蓝色那一行是以批注符号 (#) 为开头;
2.最底下一行的左边显示该档案的属性,包括 141行与 4617 字符;
3.最底下一行的右边出现的 1,1 表示光标所在为第一行, 第一个字符位置之意(请看一下上图中的游标所在);
所以,如果你向下移动到其他位置时,出现的非批注的数据就会有点像这样:

tu

看到了喔!除了批注之外,其他的行就会有特别的颜色显示呢!可以避免你打错字啊!而且, 最右下角的 30% 代表目前这个画面占整体档案的 30% 之意!这样瞭乎?

区块选择(Visual Block)

刚刚我们提到的简单的 vi 操作过程中,几乎提到的都是以行为单位的操作。那么如果我想要搞定的是一个区块范围呢? 举例来说,像底下这种格式的档案:

这个档案我将他放置到 http://vbird.dic.ksu.edu.tw/linux_basic/0310vi/hosts ,你可以自行下载来看一看这个档案啊!现在我们来玩一玩这个档案吧!假设我想要将 host1, host2... 等等复制起来, 并且加到每一行的后面,亦即每一行的结果要是『 192.168.1.2 host2.class.net host2 』这样的情况时, 在传统或现代的窗口型编辑器似乎不容易达到这个需求,但是咱们的 vim 是办的到的喔! 那就使用区块选择 (Visual Block) 吧!当我们按下 v 或者 V 或者 [Ctrl]+v 时, 这个时候光标移动过的地方就会开始反白,这三个按键的意义分别是:

区块选择的按键意义

v字符选择,会将光标经过的地方反白选择!
V行选择,会将光标经过的行反白选择!
[Ctrl]+v区块选择,可以用长方形的方式选择资料
y将反白的地方复制起来
d将反白的地方删除掉


来实际进行我们需要的动作吧!就是将 host 再加到每一行的最后面,你可以这样做:

1.使用 vim hosts 来开启该档案,记得该档案请由上述的连结下载先!
2.将光标移动到第一行的 host 那个 h 上头, 然后按下 [ctrl]+v ,左下角出现区块示意字样:

tu

3.将光标移动到最底部,此时光标移动过的区域会反白!如下图所示:

tu

4. 此时你可以按下『 y 』来进行复制,当你按下 y 之后,反白的区块就会消失不见啰!
5.最后,将光标移动到第一行的最右边,并且再用编辑模式向右按两个空格键, 回到一般模式后, 再按下『 p 』后,你会发现很有趣!如下图所示:

tu

透过上述的功能,你可以复制一个区块,并且是贴在某个『区块的范围』内,而不是以行为单位来处理你的整份文件喔! 鸟哥个人是觉得这玩意儿非常的有帮助啦!至少在进行排列整齐的文本文件中复制/删除区块时,会是一个非常棒的功能!

多档案编辑

假设一个例子,你想要将刚刚我们的 hosts 内的 IP 复制到你的 /etc/hosts 这个档案去, 那么该如何编辑?我们知道在 vi 内可以使用 :r filename 来读入某个档案的内容, 不过,这样毕竟是将整个档案读入啊!如果我只是想要部分内容呢?呵呵!这个时候多档案同时编辑就很有用了。 我们可以使用 vim 后面同时接好几个档案来同时开启喔!相关的按键有:

多档案编辑的按键

:n编辑下一个档案
:N编辑上一个档案
:files列出目前这个 vim 的开启的所有档案


在过去,鸟哥想要将 A 档案内的十条消息『移动』到 B 档案去,通常要开两个 vim 窗口来复制, 偏偏每个 vim 都是独立的,因此并没有办法在 A 档案下达『 nyy 』再跑到 B 档案去『 p 』啦! 在这种情况下最常用的方法就是透过鼠标圈选, 复制后贴上。不过这样一来还是有问题,因为鸟哥超级喜欢使用 [Tab] 按键进行编排对齐动作, 透过鼠标却会将 [Tab] 转成空格键,这样内容就不一样了!此时这个多档案编辑就派上用场了!

现在你可以做一下练习看看说!假设你要将刚刚鸟哥提供的 hosts 内的前四行 IP 数据复制到你的 /etc/hosts 档案内,那可以怎么进行呢?可以这样啊:

1.透过『 vim hosts /etc/hosts 』指令来使用一个 vim 开启两个档案;
2.在 vim 中先使用『 :files 』察看一下编辑的档案数据有啥?结果如下所示。 至于下图的最后一行显示的是『按下任意键』就会回到 vim 的一般模式中!

tu

3.在第一行输入『 4yy 』复制四行;
4.在 vim 的环境下输入『 :n 』会来到第二个编辑的档案,亦即 /etc/hosts 内;
5.在 /etc/hosts 下按『 G 』到最后一行,再输入『 p 』贴上;
6.按下多次的『 u 』来还原原本的档案数据;
7.最终按下『 :q 』来离开 vim 的多档案编辑吧!

看到了吧?利用多档案编辑的功能,可以让你很快速的就将需要的资料复制到正确的档案内。 当然啰, 这个功能也可以利用窗口接口来达到,那就是底下要提到的多窗口功能。


多窗口功能

在开始这个小节前,先来想象两个情况:

当我有一个档案非常的大,我查阅到后面的数据时,想要『对照』前面的数据, 是否需要使用 [ctrl]+f 与 [ctrl]+b (或 pageup, pagedown 功能键) 来跑前跑后查阅?

我有两个需要对照着看的档案,不想使用前一小节提到的多档案编辑功能;
在一般窗口接口下的编辑软件大多有『分割窗口』或者是『冻结窗口』的功能来将一个档案分割成多个窗口的展现, 那么 vim 能不能达到这个功能啊?可以啊!但是如何分割窗口并放入档案呢? 很简单啊! 在指令列模式输入『:sp {filename}』即可!那个 filename 可有可无, 如果想要在新窗口启动另一个档案,就加入档名, 否则仅输入 :sp 时, 出现的则是同一个档案在两个窗口间!

让我们来测试一下,你先使用『 vim /etc/man.config 』打开这个档案,然后『 1G 』去到第一行,之后输入『 :sp 』 再次的打开这个档案一次,然后再输入『 G 』,结果会变成底下这样喔:

tu

万一你再输入『 :sp /etc/hosts 』时,就会变成下图这样喔:

tu

怎样?帅吧! 两个档案同时在一个屏幕上面显示,你还可以利用『[ctrl]+w+↑』及『[ctrl]+w+↓』 在两个窗口之间移动呢!这样的话,复制啊、查阅啊等等的,就变的很简单啰~ 分割窗口的相关指令功能有很多,不过你只要记得这几个就好了:

多窗口情况下的按键功能

: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 啊!


鸟哥第一次玩 vim 的分割窗口时,真是很高兴啊!竟然有这种功能!太棒了! ^_^


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

有没有发现,如果我们以 vim 软件来搜寻一个档案内部的某个字符串时,这个字符串会被反白, 而下次我们再次以 vim 编辑这个档案时,该搜寻的字符串反白情况还是存在呢!甚至于在编辑其他档案时, 如果其他档案内也存在这个字符串,哇!竟然还是主动反白耶!真神奇! 另外,当我们重复编辑同一个档案时,当第二次进入该档案时, 游标竟然就在上次离开的那一行上头呢!真是好方便啊~但是,怎么会这样呢?

这是因为我们的 vim 会主动的将你曾经做过的行为登录下来,好让你下次可以轻松的作业啊! 那个记录动作的档案就是: ~/.viminfo !如果你曾经使用过 vim, 那你的家目录应该会存在这个档案才对。这个档案是自动产生的, 你不必自行建立。而你在 vim 里头所做过的动作,就可以在这个档案内部查询到啰~ ^_^

此外,每个 distributions 对 vim 的预设环境都不太相同,举例来说,某些版本在搜寻到关键词时并不会高亮度反白, 有些版本则会主动的帮你进行缩排的行为。但这些其实都可以自行设定的,那就是 vim 的环境设定啰~ vim 的环境设定参数有很多,如果你想要知道目前的设定值,可以在一般模式时输入『 :set all 』 来查阅,不过.....设定项目实在太多了~所以,鸟哥在这里仅列出一些平时比较常用的一些简单的设定值, 提供给你参考啊。

vim 的环境设定参数

:set nu
:set nonu就是设定与取消行号啊!
:set hlsearch
:set nohlsearchhlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜寻的字符串反白的设定值。默认值是 hlsearch
:set autoindent
:set noautoindent是否自动缩排?autoindent 就是自动缩排。
:set backup是否自动储存备份档?一般是 nobackup 的, 如果设定 backup 的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为 filename~ 的档案。 举例来说,我们编辑 hosts ,设定 :set backup ,那么当更动 hosts 时,在同目录下,就会产生 hosts~ 文件名的档案,记录原始的 hosts 档案内容
:set ruler还记得我们提到的右下角的一些状态栏说明吗? 这个 ruler 就是在显示或不显示该设定值的啦!
:set showmode这个则是,是否要显示 --INSERT-- 之类的字眼在左下角的状态栏。
:set backspace=(012)一般来说, 如果我们按下 i 进入编辑模式后,可以利用退格键 (backspace) 来删除任意字符的。 但是,某些 distribution 则不许如此。此时,我们就可以透过 backspace 来设定啰~ 当 backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可删除刚刚输入的字符, 而无法删除原本就已经存在的文字了!
:set all显示目前所有的环境参数设定值。
:set显示与系统默认值不同的设定参数, 一般来说就是你有自行变动过的设定参数啦!
:syntax on
:syntax off是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本档时,如果开头是以 # 开始,那么该行就会变成蓝色。 如果你懂得写程序,那么这个 :syntax on 还会主动的帮你除错呢!但是, 如果你仅是编写纯文本档案,要避免颜色对你的屏幕产生的干扰,则可以取消这个设定 。
:set bg=dark
:set bg=light可用以显示不同的颜色色调,预设是『 light 』。如果你常常发现批注的字体深蓝色实在很不容易看, 那么这里可以设定为 dark 喔!试看看,会有不同的样式呢!


总之,这些设定值很有用处的啦!但是......我是否每次使用 vim 都要重新设定一次各个参数值? 这不太合理吧?没错啊!所以,我们可以透过配置文件来直接规定我们习惯的 vim 操作环境呢! 整体 vim 的设定值一般是放置在 /etc/vimrc 这个档案,不过,不建议你修改他! 你可以修改 ~/.vimrc 这个档案 (预设不存在,请你自行手动建立!),将你所希望的设定值写入! 举例来说,可以是这样的一个档案:

[root@www ~]# vim ~/.vimrc
"这个档案的双引号 (") 是批注
set hlsearch "高亮度反白
set backspace=2 "可随时用退格键删除
set autoindent "自动缩排
set ruler "可显示最后一行的状态
set showmode "左下角那一行的状态
set nu "可以在每一行的最前面显示行号啦!
set bg=dark "显示不同的底色色调
syntax on "进行语法检验,颜色显示。


在这个档案中,使用『 set hlsearch 』或『 :set hlsearch 』,亦即最前面有没有冒号『 : 』效果都是一样的! 至于双引号则是批注符号!不要用错批注符号,否则每次使用 vim 时都会发生警告讯息喔! 建立好这个档案后,当你下次重新以 vim 编辑某个档案时,该档案的预设环境设定就是上头写的啰~ 这样,是否很方便你的操作啊!多多利用 vim 的环境设定功能呢!^_^

vim 常用指令示意图

为了方便大家查询在不同的模式下可以使用的 vim 指令,鸟哥查询了一些 vim 与 Linux 教育训练手册, 发现底下这张图非常值得大家参考!可以更快速有效的查询到需要的功能喔!看看吧!

tu



转自: http://vbird.dic.ksu.edu.tw/linux_basic/0310vi_3.php
推荐阅读
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 解决U盘安装系统后无法重启的问题
    本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文深入探讨了计算机网络的基础概念和关键协议,帮助初学者掌握网络编程的必备知识。从网络结构到分层模型,再到传输层协议和IP地址分类,文章全面覆盖了网络编程的核心内容。 ... [详细]
  • 本文将带领读者深入了解Android系统源码在手机中的实际表现,通过详细的步骤和专业的解释,帮助你更好地理解Android系统的底层运作机制。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 本文介绍了如何在C#应用程序中有效隐藏SQLCMD命令行窗口,确保程序运行时不会弹出黑色命令提示符窗口。 ... [详细]
  • 在本教程中,我们将深入探讨如何使用 Python 构建游戏的主程序模块。通过逐步实现各个关键组件,最终完成一个功能完善的游戏界面。 ... [详细]
author-avatar
ACE纞_814
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有