Linux 中 /proc 文件系统内容详述

Linux 下的 /proc 文件系统中提供了许多有用的信息,除了基本的CPU使用率、版本号等,你甚至还可以在这里直接看到内核的输出。下面这张表,简单列举 /proc 中文件的含义:

文件名 含义
num 这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。
acpi ACPI(高级配置和电源接口)支持操作系统设置和控制各个硬件部件。 ACPI 可以取代 PnP 和 APM。 它提供有关电池、AC 适
配器、温度、风扇和系统事件(例如 “合上机盖” 或 “电池电量低”)的信息。
buddyinfo 用于诊断内存碎片问题的相关信息文件;
bus
cgroups cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单说,cgroups 可以限制、记录任务组所使用的物理资源。本质上来说,cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。
cmdline 在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递;
consoles
cpuinfo 处理器的相关信息的文件;
crypto 系统上已安装的内核使用的密码算法及每个算法的详细信息列表;
devices 系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名;
diskstats 每块磁盘设备的磁盘I/O统计信息列表;(内核2.5.69以后的版本支持此功能)
dma 每个正在使用且注册的ISA DMA通道的信息列表;
driver 内核当前支持的执行域(每种操作系统独特“个性”)信息列表;
execdomains Linux内核当前支持的execution domains
fb 帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息;
filesystems 当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型;
fs
interrupts X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号;
iomem 每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息;
ioports 当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备;
irq 为每个注册的irq创建一个以irq编号为名字的子目录
kallsyms 内核符号表(kernel symbol table)作用,变量名或者函数名组成,每一项是符号和地址的序对,就像域名和ip地址
kcore 系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能使用文件查看命令打开此文件;
keys 如果一个进程希望了解它可以查看哪些密钥,它可以通过读取 /proc/keys 获得这些信息。在配置内核时,必须启用这个文件,因为它允许任何用户列出密钥数据库。 
key-users
kmsg 此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看命令打开此文件;
kpagecount
kpageflags
loadavg 保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID;
locks 保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问;
mdstat 保存RAID相关的多块磁盘的当前状态信息;
meminfo 系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;
misc
modules 当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;
mounts -> self/mounts 在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在2.4.19以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接;/proc/self是一个独特的目录,后文中会对此目录进行介绍;
mtrr
net -> self/net
pagetypeinfo
partitions 块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目;
sched_debug
schedstat
scsi
self -> 22742
slabinfo 在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页;
softirqs
stat 实时追踪自系统上次启动以来的多种统计信息;如下所示,其中,
“cpu”行后的八个值分别表示以1/100(jiffies)秒为单位的统计值(包括系统运行于用户模式、低优先级用户模式,运系统模式、空闲模式、I/O等待模式的时间等);
“intr”行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数;
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒;
“processes (total_forks) 自系统启动以来所创建的任务的个数目;
“procs_running”:当前运行队列的任务的数目;
“procs_blocked”:当前被阻塞的任务的数目;
swaps 当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大;下面是作者系统中只有一个交换分区时的输出信息;
sys 与 /proc下其它文件的“只读”属性不同的是,管理员可对/proc/sys子目录中的许多文件内容进行修改以更改内核的运行特性,事先可以使用“ls -l”命令查看某文件是否“可写入”。写入操作通常使用类似于“echo  DATA > /path/to/your/filename”的格式进行。需要注意的是,即使文件可写,其一般也不可以使用编辑器进行编辑。
/proc/sys/debug 子目录
此目录通常是一空目录;
/proc/sys/dev 子目录
为系统上特殊设备提供参数信息文件的目录,其不同设备的信息文件分别存储于不同的子目录中,如大多数系统上都会具有的/proc/sys/dev /cdrom和/proc/sys/dev/raid(如果内核编译时开启了支持raid的功能) 目录,其内存储的通常是系统上cdrom和raid的相关参数信息文件。
sysrq-trigger
sysvipc
timer_list
timer_stats
tty
uptime 系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒;
version 当前系统运行的内核版本号,在作者的RHEL5.3上还会显示系统安装的gcc版本,如下所示;
vmallocinfo
vmstat 当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好;下面为作者机器上输出信息的一个片段;(2.6以后的内核支持此文件)
zoneinfo 内存区域(zone)的详细信息列表,信息量较大

参考文献

我的博客即将同步至腾讯云 + 社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=21yjpwt8mhhc0

拯救你的硬盘,一切井井有条

由于一直研究计算机相关技术,从开始的500GB硬盘,带后来1TB的移动硬盘,再到后来4TB移动硬盘,再到后来移动NAS。

随着数据量的不断增长,一昧的扩容硬盘也许不是一个最佳的选择,如果文件只是简单堆放,就真的同一堆数据垃圾没有两样。经过一天的整理、探索、构思,结合以往数据整理的方法,重新设计了一种个人文件数据库的存储方案,从存储介质到存储结构做了重新整合,同时考虑了个体在群体中活动可能需要产生联系的文档方案。下面就来介绍一下,其实数据,不一定非要存在硬盘里!硬盘容量,不是越大越好!

云存储介质

百度云盘的评价一直不是很好,限速、降容。看到的是百度网盘难用的现状,但其实看不到的是在国内这个网络大环境之下,带宽资源还是太过珍贵,与之相比存储资源真的不算什么,其实最花钱的是带宽资源。以某云计算提供商的弹性服务器为例,月付1M带宽升级到2M带宽需要加价近100RMB,升级到10M就直接快突破千元大关。

如此看来,数据云存储是不是还是一个遥不可及的梦呢?

不是的,除了百度云,其实你还有许多种选择方案。

  • 坚果云
  • 天翼云盘
  • WPS云
  • OneDrive
  • Google Drive

一个一个来说。首先是坚果云。坚果云的主打就是不限速,而且速度极快!具有版本控制,同步文件很放心。结合以上所说的大环境,提供了较快的带宽,就必须要限制其流量,因此坚果云通过约束每月上传下载流量来约束带宽。普通用户每月免费上传3GB,下载1GB,简单的文档同步真的是绰绰有余了,关键是用的放心,比起百度云的限速和天翼云的软件不稳定,坚果云用作多设备之间的文件同步真的很舒服了。据说清华、中科院这样的机构都在用它。

下面说说天翼云,天翼云由中国电信运营,也许是其强大的实力,天翼云提供的容量不小,关键是不限速,(最近加入了上传限速),用起来真的非常爽了,自己很早之前就注册了天翼账号,电信默认为我开通了天翼云盘,最近上去一看居然空间已经到了10TB+,为了抢占客户资源,中国电信真的是大手笔了。但可惜的是,体验一个月以来,其同步功能并不是那么令人放心,特别是一些重要文档,修改后貌似需要时间才会自动同步,不会像坚果云那样,修改一个字符都会同步。因此天翼云目前来看更适合存放一些电影、游戏等体积较大的文件资源,可以用作大文件云备份。

WPS云是WPS默认提供的, 其和WPS无缝对接,做云文档的体验真的太棒了,缺点是免费用户单文件10MB,但是基本上也是够用了,做临时文档存储和协作真的是很不错。

OneDrive不必多说,基本每个Windows电脑上都会被预装这个软件,拥有一个微软账号就能用了,受制于其物理位置,微软提供的OneDrive服务在国内体验并不好,由世纪互联运营的OneDrive体验还不错,每月至少花费30RMB就能在国内体验到1TB空间的不限速的上传下载数据,基本能够跑满带宽。但就我个人来看,OneDrive这个平台开发的并不好,web端太复杂,兼容性不好,一些旧的浏览器直接打不开,其次其稳定性还是有待考量,虽然有国内世纪互联代理版,基本上速度可以得到保障,但是其API就不够标准,拓展性弱了许多,其次其速度在有些时候得不到保障,不像坚果云那样稳定,也不像GoogleDrive那样稳定。但总的来看,其在大多数场景下的表现还是不错的。

GoogleDrive在国内很小众,想在国内使用你不能是麻瓜。但这真的是一款让你用了就离不开的东西。花几十块钱弄一个无限容量的盘,不放心可以多买几个互相备份。除了这些,其使用体验真的是很棒了,只要你的魔法差不多够强,GD可以提供几乎完美的体验,无限空间+不限速,同步灵敏度极高,稍有修改立刻同步,真的很令人放心,加上其几乎无敌的拓展性,可以轻易的分享给会魔法的同伴,还可以很轻易地建一个自己的资源站,几乎是无敌了。国内要是能出现这样一款产品,也是无敌的存在了,但是受制于许多因素,国内暂时不会出现这样的产品。具有和坚果云一样的稳定性和速度,但是不限制上下行流量,具有比天翼云还大的容量,但是非常稳定可靠。想在国内做出这样一款产品,首先必须是巨头,高层热衷于技术,其次国内网络环境必须优化到一个新的层级,综上两点,也许可以打造这样一款优秀的产品。

存储方案

上面花费许多篇幅讲述了云存储介质,云存储介质的好处在于云备份、按需存取、无缝迁移。也可以自己弄一个移动硬盘来做重要文件的备份。下面讲讲存储方案,这套方案考虑了本地端+云端,设计了一套存储结构,只需云端和本地端直接对应,互相增量同步,或是按需存储即可。

https://imagehost-cdn.frytea.com/20200705084003.jpg

上图体现了存储介质之间的存储层级、存储层级之间的关系以及个人文档库和团队文档库的对接方法,下面一一描述。

首先是云端和本地端数据互备份,可以根据需要在两端之间互相增量备份,也可以设定几个特定的文件夹进行互备份,总之按照两边都可以按照这个层级来设计目录结构,之后向目录结构中存放自己的文件即可。

各个文件夹中的内容大概按照下表:

Name Tags
Data 数据
Tools 工具,包括软件、操作系统等
Study 学习资料,包括图书、笔记
TimeLine 具有日期的事物相关材料
TeamInfo 团队材料,负责某团队活动产生的资料
Design 设计资源,字体、模板等
Media 多媒体资源,影音娱乐
Memory 记忆,包括照片、影响、文档
PersonInfo 个人资料,个人隐私材料
Security 密钥、机密
Archieve 归档,一些无关紧要但又有些价值的文件包。

各个文件夹中内容又有一些联系,根据图来看,数据分为一手资源、二手资源,一手资源是待整理的资源,需要整理后变为二手资源,使其结构化,方便未来取用及分享。

而作为个人和团队,将团队资源对接至个人文件夹中的团队信息文件夹,之后走个人文件流程即可。而团队的活动资源可分为活动前、活动中、活动后及归档。

总结

相信每个人都有自己的一套文档管理方法,随着时间的推进。人们的信息会逐渐“上云”,信息也不可避免地电子化,在这浩如烟海的数据海洋中,唯有“变废为宝”者才有可能享受到数据的价值。

这是我的个人文档管理方法,你的呢?

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=21yjpwt8mhhc0

VIM学习使用笔记

如果是初学vi,运行一下 vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行 vimtutor zh

学习笔记

Vim第一讲 基础操作

Vim第二讲 删除、重复、撤销

Vim第三讲 置入、替换、更改

Vim第四讲 搜索、查找、替换

Vim第五讲 内部命令、另存、部分保存、插入文件

Vim第六讲 插入、附加、复制粘贴、高级选项

Vim第七讲 帮助、个性化和补全

参考文献

Vim第七讲 帮助、个性化和补全

7.1 获取帮助信息

** 使用在线帮助系统 **

Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方 法之一:

  • 按下 ` ` 键 (如果键盘上有的话)
  • 按下 ` ` 键 (如果键盘上有的话)
  • 输入 :help

请阅读帮助窗口中的文字以了解帮助是如何工作的。 输入 CTRL-W CTRL-W 可以使您在窗口之间跳转。 输入 :q <回车> 可以关闭帮助窗口。

提供一个正确的参数给” :help “命令,您可以找到关于该主题的帮助。请试验以 下参数(可别忘了按回车键哦):

    :help w
    :help c_CTRL-D
    :help insert-index
    :help user-manual

7.2 创建启动脚本

** 启用 Vim 的特性 **

Vim 的功能特性要比 Vi 多得多,但其中大部分都没有缺省启用。为了使用更多的 特性,您得创建一个 vimrc 文件。

  1. 开始编辑 vimrc 文件,具体命令取决于您所使用的操作系统: :edit ~/.vimrc 这是 Unix 系统所使用的命令 :edit $VIM/_vimrc 这是 MS-Windows 系统所使用的命令
  2. 接着读取 vimrc 示例文件的内容: :r $VIMRUNTIME/vimrc_example.vim
  3. 保存文件,命令为: :write

下次您启动 Vim 时,编辑器就会有了语法高亮的功能。 您可以把您喜欢的各种设置添加到这个 vimrc 文件中。 要了解更多信息请输入 :help vimrc-intro

7.3 补全功能

** 使用 CTRL-D 和 
<TAB> 可以进行命令行补全 **
  1. 请确保 Vim 不是在以兼容模式运行: :set nocp
  2. 查看一下当前目录下已经存在哪些文件,输入: :!ls 或者 :!dir
  3. 现在输入一个目录的起始部分,例如输入: :e
  4. 接着按 CTRL-D 键,Vim 会显示以 e 开始的命令的列表。
  5. 然后按 ` ` 键,Vim 会补全命令为 `:edit` 。
  6. 现在添加一个空格,以及一个已有文件的文件名的起始部分,例如: :edit FIL
  7. 接着按 ` ` 键,Vim 会补全文件名(如果它是惟一匹配的)。

提示:补全对于许多命令都有效。您只需尝试按 CTRL-D 和 `

`。 它对于 `:help` 命令非常有用。 ## 总结 1. 输入 `:help` 或者按 ` ` 键或 “ 键可以打开帮助窗口。 2. 输入 `:help cmd` 可以找到关于 cmd 命令的帮助。 3. 输入 `CTRL-W` CTRL-W 可以使您在窗口之间跳转。 4. 输入 `:q` 以关闭帮助窗口 5. 您可以创建一个 `vimrc` 启动脚本文件用来保存您偏好的设置。 6. 当输入 `:` 命令时,按 `CTRL-D` 可以查看可能的补全结果。 按 ` ` 可以使用一个补全。 ## 推荐阅读 Vim – Vi Improved – 作者:Steve Oualline 出版社:New Riders 这是第一本完全讲解 Vim 的书籍。它对于初学者特别有用。其中包含有大量实例 和图示。 欲知详情,请访问 [http://iccf-holland.org/click5.html](http://iccf-holland.org/click5.html)

Vim第六讲 插入、附加、复制粘贴、高级选项

6.1 打开类命令

** 输入 o 将在光标的下方打开新的一行并进入插入模式。**
  1. 输入小写的 o 在光标 下方 打开新的一行,这个命令会使您 进入插入模式。
  2. 然后输入一些文字,按 ` ` 键退出插入模式而进入正常模式。
  3. 为了在光标 上方 打开新的一行,只需要输入大写的 O 而不是小写的 o 就可以了。

6.2 附加类命令

** 输入 a 将可在光标之后插入文本。 **
  1. 接着输入 e 移动光标至需添加单词的末尾。
  2. 输入小写的 a 则可在光标之后插入文本了。
  3. 按 ` ` 键退出插入模式回到正常模式。

提示: aiA 都会带您进入插入模式,惟一的区别在于字符插入的位置。

6.3 另外一个置换类命令的版本

** 输入大写的 R 可连续替换多个字符。**
  1. 输入大写的 R 开始把第一行中的不同于第二行的剩余字符逐一输入。
  2. 接着按 ` ` 键退出替换模式回到正常模式。

6.4 复制粘贴文本

** 使用操作符 y 复制文本,使用 p 粘贴文本 **
  1. 使用 v 进入可视模式,移动光标到欲复制单词前面。
  2. 输入 y 以抽出(复制)高亮的文本。
  3. 输入 p 以放置(粘贴)复制了的文本。

提示:您还可以把 y 当作操作符来使用;例如 yw 可以用来复制一个单词。

6.5 设置类命令的选项

** 设置可使查找或者替换可忽略大小写的选项 **
  1. 要查找单词 ignore 可在正常模式下输入 /ignore <回车>。 要重复查找该词,可以重复按 n 键。
  2. 然后设置 ic 选项(Ignore Case,忽略大小写),请输入: :set ic
  3. 现在可以通过键入 n 键再次查找单词 ignore。注意到 Ignore 和 IGNORE 现在 也被找到了。
  4. 然后设置 hlsearchincsearch 这两个选项,请输入: :set hls is
  5. 现在可以再次输入查找命令,看看会有什么效果: /ignore <回车>
  6. 要禁用忽略大小写,请输入: :set noic

提示:要移除匹配项的高亮显示,请输入: :nohlsearch 提示:如果您想要仅在一次查找时忽略字母大小写,您可以使用 \c: /ignore\c <回车>

总结

  1. 输入小写的 o 可以在光标下方打开新的一行并进入插入模式。 输入大写的 O 可以在光标上方打开新的一行。
  2. 输入小写的 a 可以在光标所在位置之后插入文本。 输入大写的 A 可以在光标所在行的行末之后插入文本。
  3. e 命令可以使光标移动到单词末尾。
  4. 操作符 y 复制文本, p 粘贴先前复制的文本。
  5. 输入大写的 R 将进入替换模式,直至按 ` ` 键回到正常模式。
  6. 输入 :set xxx 可以设置 xxx 选项。一些有用的选项如下: 'ic' ‘ignorecase’ 查找时忽略字母大小写 'is' ‘incsearch’ 查找短语时显示部分匹配 'hls' ‘hlsearch’ 高亮显示所有的匹配短语 选项名可以用完整版本,也可以用缩略版本。
  7. 在选项前加上 no 可以关闭选项: :set noic

Vim第五讲 内部命令、另存、部分保存、插入文件

5.1 在 VIM 内执行外部命令的方法

** 输入 :! 然后紧接着输入一个外部命令可以执行该外部命令。**
  1. 按下我们所熟悉的 : 命令使光标移动到屏幕底部。这样您就可以输入一行命令了。
  2. 接着输入感叹号 ! 这个字符,这样就允许您执行外部的 shell 命令了。
  3. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的 内容,就如同您在命令行提示符下输入 ls 命令的结果一样。如果 !ls 没起 作用,您可以试试 :!dir 看看。

提示:所有的外部命令都可以以这种方式执行,包括带命令行参数的那些。

提示:所有的 : 命令都必须以敲 <回车> 键结束。从今以后我们就不会总是提到这一点 了。

5.2 关于保存文件的更多信息

** 要将对文件的改动保存到文件中,请输入 :w FILENAME 。**
  1. 输入 :!dir 或者 :!ls 获知当前目录的内容。您应当已知道最后还得敲 <回车> 吧。
  2. 选择一个未被用到的文件名,比如 TEST
  3. 接着输入 :w TEST (此处 TEST 是您所选择的文件名。)
  4. 该命令会以 TEST 为文件名保存整个文件 (Vim 教程)。为了验证这一点, 请再次输入 :!dir:!ls 查看您的目录列表内容。

请注意:如果您退出 Vim 然后在以命令 vim TEST 再次启动 Vim,那么该文件内 容应该同您保存时的文件内容是完全一样的。

  1. 现在您可以删除 TEST 文件了。

MS-DOS 下,请输入: :!del TESTUnix 下,请输入: :!rm TEST

5.3 一个具有选择性的保存命令

** 要保存文件的部分内容,请输入 v motion :w FILENAME **
  1. 移动光标到本行。
  2. 接着按 v 键,将光标移动至下面第五个条目上。您会注意到之间的文本被高亮了。
  3. 然后按 : 字符。您将看到屏幕底部会出现 :'<,'>
  4. 现在请输入 w TEST ,其中 TEST 是一个未被使用的文件名。确认您看到了 :'<,'>w TEST 之后按 <回车> 键。
  5. 这时 Vim 会把选中的行写入到以 TEST 命名的文件中去。使用 :!dir:!ls 确认文件被正确保存。这次先别删除它!我们在下一讲中会用到它。

提示:按 v 键使 Vim 进入可视模式进行选取。您可以四处移动光标使选取区域变大或 变小。接着您可以使用一个操作符对选中文本进行操作。例如,按 d 键会删除 选中的文本内容。

5.4 提取和合并文件

   ** 要向当前文件中插入另外的文件的内容,请输入 :r FILENAME **
  1. 通过命令 :r TEST 将前面创建的名为 TEST 的文件提取进来。 您所提取进来的文件将从光标所在位置处开始置入。
  2. 为了确认文件已经提取成功,移动光标回到原来的位置就可以注意有两份第 五讲第三节的内容,一份是原始内容,另外一份是来自文件的副本。

提示:您还可以读取外部命令的输出。例如, :r !ls 可以读取 ls 命令的输出,并 把它放置在光标下面。

总结

  1. :!command 用于执行一个外部命令 command。

    请看一些实际例子: (MS-DOS) (Unix) :!dir :!ls – 用于显示当前目录的内容。 :!del FILENAME :!rm FILENAME – 用于删除名为 FILENAME 的文件。

  2. :w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文 件中。

  3. v motion :w FILENAME 可将当前编辑文件中可视模式下选中的内容保存到文件 FILENAME 中。

  4. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置 后面。

  5. :r !dir 可以读取 dir 命令的输出并将其放置到当前文件的光标位置后面。

Vim第四讲 搜索、查找、替换

4.1 定位及文件状态

** 输入 CTRL-G 显示当前编辑文件中当前光标所在行位置以及文件状态信息。
     输入大写 G 则直接跳转到文件中的某一指定行。**
  1. 按下 CTRL 键不放开然后按 g 键。我们称这个键组合为 CTRL-G。 您会看到页面最底部出现一个状态信息行,显示的内容是当前编辑的文件名 和文件中光标位置。请记住行号,它会在步骤3中用到。

提示:您也许会在屏幕的右下角看到光标位置,这会在 ‘ruler’ 选项设置时发生 (参见 :help 'ruler')

  1. 输入大写 G 可以使得当前光标直接跳转到文件最后一行。 输入 gg 可以使得当前光标直接跳转到文件第一行。
  2. 输入 您曾停留的行号 ,然后输入 大写 G。这样就可以返回到您第一次按下 CTRL-G 时所在的行了。

4.2 搜索

** 输入 / 加上一个字符串可以用以在当前文件中查找该字符串。**
  1. 在正常模式下输入 / 字符。您此时会注意到该字符和光标都会出现在屏幕底 部,这跟 : 命令是一样的。
  2. 接着输入 errroor <回车> 。那个 errroor 就是您要查找的字符串。
  3. 要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字 符串,请输入 大写 N 即可。
  4. 如果您想逆向查找字符串,请使用 ? 代替 / 进行。
  5. 要回到您之前的位置按 CTRL-O (按住 Ctrl 键不放同时按下字母 o)。重复按可以 回退更多步。 CTRL-I 会跳转到较新的位置。

4.3 配对括号的查找

** 输入 % 可以查找配对的括号 )、]、}。**
  1. 移动光标到一个括号 )]}% 字符。
  2. 此时光标的位置应当是在配对的括号处。
  3. 再次按 % 就可以跳回配对的第一个括号处。

4.4 替换

** 输入 :s/old/new/g 可以替换 old 为 new。**
  1. 输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个匹配 串。
  2. 输入 :s/thee/the/g 则是替换全行的匹配串,该行中所有的 “thee” 都会被 改变。
  3. 要替换两行之间出现的每个匹配串,请 输入 :#,#s/old/new/g 其中 #,# 代表的是替换操作的若干行中 首尾两行的行号。 输入 :%s/old/new/g 则是替换整个文件中的每个匹配串。 输入 :%s/old/new/gc 会找到整个文件中的每个匹配串,并且对每个匹配串 提示是否进行替换。

总结

  1. CTRL-G 用于显示当前光标所在位置和文件状态信息。 G 用于将光标跳转至文件最后一行。 先敲入一个 行号 然后输入 大写 G 则是将光标移动至该行号代表的行。 gg 用于将光标跳转至文件第一行。
  2. 输入 / 然后紧随一个 字符串 是在当前所编辑的文档中 正向查找 该字符串。 输入 ? 然后紧随一个 字符串 则是在当前所编辑的文档中 反向查找 该字符串。 完成一次查找之后按 n 键是重复上一次的命令,可在同一方向上查 找下一个匹配字符串所在;或者按大写 N 向相反方向查找下一匹配字符串所在。 CTRL-O 带您跳转回较旧的位置,CTRL-I 则带您到较新的位置。
  3. 如果光标当前位置是括号 (、)、[、]、{、} ,按 % 会将光标移动到配对的括号上。
  4. 在一行内替换 头一个 字符串 old 为新的字符串 new,请输入 :s/old/new 在一行内替换 所有 的字符串 old 为新的字符串 new,请输入 :s/old/new/g两行内 替换所有的字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g文件内 替换所有的字符串 old 为新的字符串 new,请输入 :%s/old/new/g 进行全文替换时 询问用户确认 每个替换需添加 c 标志 :%s/old/new/gc

Vim第三讲 置入、替换、更改

3.1 置入类命令

** 输入 p 将最后一次删除的内容置入光标之后。 **
# example
---> b) Violets are blue,
---> c) Intelligence is learned,
---> d) Can you learn too?
---> |a) Roses are red,
$ dd
|
---> b) Violets are blue,
---> c) Intelligence is learned,
---> d) Can you learn too?
$ p
|---> a) Roses are red,
---> b) Violets are blue,
---> c) Intelligence is learned,
---> d) Can you learn too?

3.2 替换

** 输入 r 和一个字符替换光标所在位置的字符。**
# example
--->  Whan this lime was t|uoed in, someone presswd some wrojg keys!
--->  When this line was typed in, someone pressed some wrong keys!
$ ry
--->  Whan this lime was t|yoed in, someone presswd some wrojg keys!
--->  When this line was typed in, someone pressed some wrong keys!

3.3 更改

** 要改变文本直到一个单词的末尾,请输入 ce **
# example
---> This line has a few w|ptfd that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
$ ce ords
---> This line has a few words| that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
$ 
<Esc>

3.4 使用c更改更多

** 更改类操作符可以与删除中使用的同样的动作配合使用。 **\
# example
---> The end of this line needs |some help to make it like the second.
---> The end of this line needs to be corrected using the  c$  command.
$ c$ to be corrected using the  c$  command.
---> The end of this line needs to be corrected using the  c$  command.|
---> The end of this line needs to be corrected using the  c$  command.
$ 
<Esc>

总结

  1. 要重新置入已经删除的文本内容,请按小写字母 p 键。该操作可以将已删除 的文本内容置于光标之后。如果最后一次删除的是一个整行,那么该行将置 于当前光标所在行的下一行。
  2. 要替换光标所在位置的字符,请输入小写的 r 和要替换掉原位置字符的 新字 符 即可。
  3. 更改类命令允许您改变从当前光标所在位置直到动作指示的位置中间的文本。 比如输入 ce 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当 前光标到行末的内容。
  4. 更改类命令的格式是:

     c   [number]   motion

Vim第二讲 删除、重复、撤销

2.1 简单命令

** 输入 dw 可以从光标处删除至一个单词的末尾。**
# example
---> Tha words don't |belong paper in this sentence.
$ dw
---> Tha words don't paper in this sentence.

2.2 更多删除

** 输入 d$ 从当前光标删除到行末。**
# example
---> |Somebody typed the end of this line twice. end of this line twice.
$ d$
---> |

2.3 命令和对象

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

        d   motion

  其中:
    d      - 删除操作符。
    motion - 操作符的操作对象(在下面列出)。

  简单的动作列表:
    w - 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。
    e - 从当前光标当前位置直到单词末尾,包括最后一个字符。
    $ - 从当前光标当前位置直到当前行末。

  因此输入 de 会从当前光标位置删除到单词末尾。

2.4 重复动作计数器

** 在动作前输入数字会使它重复那么多次。 **
# example
---> This is just a |line with words you can move around in.
  1. 输入 2w 使光标向前移动两个单词。
---> This is just a line with |words you can move around in.
  2. 输入 3e 使光标向前移动到第三个单词的末尾。
---> This is just a line with words you can| move around in.
  3. 输入 0 (数字零) 移动光标到行首。
---> |This is just a |line with words you can move around in.

2.5 删除更多

# 使用格式
d   number(数字)   motion
# example
--->  this |ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
$ d2w
--->  this |line FGHI JK LMN OP of words is Q RS TUV cleaned up.
$ d3e
--->  this line  |OP of words is Q RS TUV cleaned up.

2.6 删除整行

** 输入 dd 可以删除整一个当前行。 **
# exmample
--->  |1)  Roses are red,
--->  2)  Mud is fun,
--->  3)  Violets are blue,
--->  4)  I have a car,
--->  5)  Clocks tell time,
--->  6)  Sugar is sweet
--->  7)  And so are you.
$ dd
|--->  2)  Mud is fun,
--->  3)  Violets are blue,
--->  4)  I have a car,
--->  5)  Clocks tell time,
--->  6)  Sugar is sweet
--->  7)  And so are you.
$ 2dd
|--->  4)  I have a car,
--->  5)  Clocks tell time,
--->  6)  Sugar is sweet
--->  7)  And so are you.

2.7 撤销命令

** 输入 u 来撤消最后执行的命令,输入 U 来撤消对整行的修改。 **
** CTRL-R 重做被撤消的命令 **

总结

  1. 欲从当前光标删除至下一个单词,请输入: dw
  2. 欲从当前光标删除至当前行末尾,请输入: d$
  3. 欲删除整行,请输入: dd
  4. 欲重复一个动作,请在它前面加上一个数字: 2w
  5. 在正常模式下修改命令的格式是: operator [number] motion 其中: operator – 操作符,代表要做的事情,比如 d 代表删除 [number] – 可以附加的数字,代表动作重复的次数 motion – 动作,代表在所操作的文本上的移动,例如 w 代表单词(word), $ 代表行末等等。
  6. 欲移动光标到行首,请按数字0键:
  7. 欲撤消以前的操作,请输入: u (小写的u) 欲撤消在一行中所做的改动,请输入: U (大写的U) 欲撤消以前的撤消命令,恢复以前的操作结果,请输入: CTRL-R

Vim第一讲 基础操作

1.1 移动光标

** 要移动光标,请依照说明分别按下 h、j、k、l 键。 **

             ^
             k              提示: h 的键位于左边,每次按下就会向左移动。
       < h       l >               l 的键位于右边,每次按下就会向右移动。
             j                     j 键看起来很象一支尖端方向朝下的箭头。
             v

1.2 进入和退出

vim somefile #进入
:q 退出

1.3 删除

** 在正常(Normal)模式下,按下 x 键来删除光标所在位置的字符。**

1.4 插入

** 在正常模式下,可以按下 i 键来插入文本。**

1.5 添加

** 按 A 键以添加文本。 **

1.6 保存

** 使用 :wq 以保存文件并退出。 **

总结

  1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。 h (左移) j (下行) k (上行) l (右移)
  2. 欲进入 Vim 编辑器(从命令行提示符),请输入: vim 文件名 <回车>
  3. 欲退出 Vim 编辑器,请输入 ` :q! ` 放弃所有改动。 或者输入 ` :wq ` 保存改动。
  4. 在正常模式下删除光标所在位置的字符,请按: x
  5. 欲插入或添加文本,请输入:

     i   输入欲插入文本  
    <ESC>             # 在光标前插入文本
     A  输入欲添加文本   
    <ESC>             # 在一行后添加文本

特别提示:按下 `

` 键会带您回到正常模式或者撤消一个不想输入或部分完整 的命令。