chenying 2012-10-19
学习笔记,内容基础,适合初学者。
阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)
《Unix & Linux 大学教程》 - 第一、二章 学习笔记 Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记 Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记 文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记 shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记 使用shell:初始化文件
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器 (二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器 (三)
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 附录F 时区与24小时制时间
第二十二章:vi文本编辑器(三)
设置选项
两种选项类型:开关与变量
开关语法:
:set [no]option...
开关 | 缩写 | 默认值 | 含义 |
autoindent | ai | off | 和shift width相关,缩进以匹配上一行/下一行 |
autowrite | aw | off | 如果文本已经修改,则在切换文件前保存 |
errorbells | eb | off | 当显示错误消息时发出滴滴声 |
exrc | ex | off | 在当前目录中查找初始化文件 |
ignorecase | ic | off | 在搜索过程中忽略大小写 |
list | -- | off | 将制表符显示为^I,将行的结束显示为$ |
number | nu | off | 显示行号 |
readonly | ro | off | 不允许修改编辑缓冲区的内容 |
showmatch | sm | off | 输入模式:显示匹配的()、{}或[] |
showmode | smd | off | 当进入输入模式时显示一个提醒 |
wrapscan | ws | off | 在搜索过程中,环绕到文本的开头/末尾继续搜索 |
writeany | wa | off | 允许不需要重载! 就可以写入任何文件 |
变量语法:
:set option[=value]...
变量 | 缩写 | 默认值 | 含义 |
lines | -- | 24 | 文本的行数(窗口/屏幕大小-1) |
shiftwidth | sw | 8 | autoindent 使用的空格数量 |
tabstop | ts | 8 | 制表符间距 |
wrapmargin | wm | 0 | 设置自动换行时的页边距(0=off) |
显示选项
语法:
:set [option[?]... | all]
:set all:显示所有选项的值
:set number? showmode?:显示多个选项的值
:set:显示改变了默认值的选项
键入过程中自动换行
语法:
:set wrapmargin=n(n为距离右边距的字符数)
wrapmargin=0(不自动换行)
(不知道这个怎么用,我这里似乎没有什么效果。。。)
:set autoindent(设置自动缩进)
(这个实验是有效果的,换行之后,新行与上行与左边距的距离相同)
分隔与连接行
语法:
r<Return>:在光标处换行(在修改文本中讲过r了)
J:连接行,在所在行执行J,结果将下一行接到本行末尾(自动插入空格,单词间一个,句子间两个)
3J:我机器上的结果为将3行合并为一行,而不是执行3次J(3次J则是将4行合并为一行)
复制与移动行
语法:
:x[,y]coz:x,y,z为行号。将第x(至第y)行复制到第z行的下面
:x[,y]mz:x,y,z为行号。将第x(至第y)行移动到第z行的下面
输入shell命令
语法:
:!command:暂停vi,执行shell命令
:!!:暂停vi,执行前一条命令
:sh:暂停vi,启动一个新shell(默认shell)
:!bash:暂停vi,启动一个新Bash shell
:!tcsh:暂停vi,启动一个新Tcsh shell
将文件中的数据插入到编辑缓冲区中
语法:
:[line]r file:在第line行之后插入file
:$r text(在末尾插入文件text)
将shell命令的输出插入到编辑缓冲区中
语法:
:[line]r !command:在第line行之后插入执行command命令后输出的内容
:r !ls -l(在当前行下面插入ls -l后的输出)
使用程序处理数据
!和!!命令将把编辑缓冲区中的行发送给另一个程序,该程序的输出将替换原始行
语法:
n!!program:在n个行上执行程序program
!move progarm:从当前行至move行执行程序program
5!!sort(从当前行开始,到连续5行的文本执行sort命令)
!Gsort(从当前行开始,到文本末尾执行sort命令)
将数据写入文件
语法:
:w:将数据写入原始文件
:w file:将数据写入到一个新的文件(如果这个文件不存在,则会提示警告,如果确实要覆盖,使用下面的命令)
:w! file:覆盖一个已有的文件
:w>>file:将数据追加到指定的文件
切换到一个新文件
语法:
:e file:切换到新的文件(如果当前文件有未保存内容,则需要保存,如果不想保存,则需使用下面的命令)
:e! file:切换到新的文件,忽略对当前文件的修改
:e!:忽略当前的修改,重新编辑此文件
使用缩写
语法:
:ab [short long]:缩写(abbreviate),在输入模式中使用(只有缩写成为单独单词时才会自动补全)
:una short:反缩写(un-abbreviate),删除一个缩写
:ab:查看缩写列表
宏
在命令模式下使用的单字符缩写
Vi:可以用作宏名称的字符 | ||||||
|
Vim:可以用作宏名称的字符 | ||||||
|
语法:
:map [x commands]
x为一个字符
commands是vi或ex命令序列
:map g 1G:输入g,则跳转到第一行
:map K deep:输入K,则调换两个单词
:map * I/* ^V^[A */^V^[:把当前行变为/*……*/形式的注释(在当前行前后分别加入/*和*/)
(^V^[,输入一个<ESC>码)
某些版本允许将宏赋给F1-F10
语法:
:map #number commands
:map #3 :set all:将F3设置为查看所有选项
移除宏
:unmap x
初始化文件
vi:.exrc
vim:.vimrc
一些版本的vi(或vim)不允许初始化文件中有空行,并且可能会提示一个不明确的错误消息,比如:Error detected in .exrc
如果home中有初始化文件,则加载,并执行其中命令
使用两个初始化文件
检查exrc选项,如果是打开的,则在当前目录下查找第二个初始化文件来执行
相关文档/帮助
vimtutor
:help
:help-user-manual
:help-differences
转贴请保留以下链接
本人blog地址