190 likes | 350 Views
vi 文本编辑器. 主要内容. vi 的模式 vi 的进入 命令模式 插入 模式 末行模式. vi 的模式. Command Mode ( 命令模式) 这 是 执行 vi 后的缺省 模式 此时键盘输入当作 命令 命令有大小 写 之 区 分 Input Mode ( 插入模式) 使用 a、i、o 、 c 、 r 、 s 进入插入模式 用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上 按下 ESC 键 即可回到 Command Mode. vi 的模式. Last Mode ( 末行 模式)
E N D
主要内容 • vi的模式 • vi的进入 • 命令模式 • 插入模式 • 末行模式
vi的模式 • Command Mode (命令模式) • 这是执行vi后的缺省模式 • 此时键盘输入当作命令 • 命令有大小写之区分 • Input Mode (插入模式) • 使用 a、i、o、c、r、s进入插入模式 • 用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上 • 按下 ESC 键即可回到 Command Mode
vi的模式 • Last Mode (末行模式) • 在Command Line 按下 : 即可进入该模式 • 用来进行保存文件、打开文档或环境的设定 • 命令有大小写之分
vi的进入和内容输入 • 进入: • vi 文件名 • 输入文件内容 (进入插入模式) • 新增 (append) a 从光标所在位置后面开始新增内容 • A 从光标所在行最后面的地方开始新增内容。 • 插入 (insert) i 从光标所在位置前面开始插入内容 • I 从光标所在行的第一个非空白字符前面开始插入资料。 • 开始 (open) o 在光标所在行下新增一行并进入输入模式。 O 在光标所在行上新增一行并进入输入模式。 (命令模式)
命令模式 • 1、光标的移动 • h 左移一个字符 l 右移一个字符j 下移一行 k 上移一行w,W 跳至后一个字的开头(W忽略标点) b,B 跳至前一个字的开头(B忽略标点)e 移动到后一个字的末尾 • ^ 至本行第一个非空字符 • $ 至行尾 0 至行首H 移动到当前窗口的第一列 M 移动到当前窗口的中间列 L 移动到视窗的最后一列) 光标所在位置到下个句子的第一个字母 • ( 光标所在位置到该句子的第一个字母 • } 光标所在位置到该段落的最后一个字母 { 光标所在位置到该段落的第一个字母
命令模式 • 1、光标的移动(续) nH 将光标移到屏幕的第 n 行 nL 将光标移到屏幕的倒数第 n 行 CTRL-d 向下半页 CTRL-f 向下一页 CTRL-u 向上半页 CTRL-b 向上一页 n- 减号移动到上一行的第一个非空白字符,前面加上数字可以指定移动到以 上 n 行 n+ 加号移动到下一行的第一个非空白字符,前面加上数字可以指定移动到以下 n 行
命令模式 • 2、删除 • x 删除光标所在字符 • X 删除光标前面的字符 • s 删除光标所在字符,并进入输入模式 • S 删除光标所在的行,并进入输入模式 • dd 删除光标所在的行 • D 从光标位置开始删除到行尾 • d与光标移动命令的组合
命令模式 • 3、修改 r 修改光标所在字符,r 后接着要修改的字符。如,rc 可以用字符“ c ”替换光标所指向的当前字符 R 进入替换状态,新增内容会覆盖原先内容,直到按 [ESC] 回到命令模式下为止 cc 修改光标所在行 C 修改从光标位置到该行末尾的内容 c 与光标移动命令的组合
命令模式 • 4、复制和移动 yy 复制当前行到内存缓冲区 nyy 复制 n 行内容到内存缓冲区 p 将缓冲区的内容粘贴到光标的后面 P 将缓冲区的内容粘贴到光标的前面 另:在末行模式下实现移动 :n1,n2 m n3 : 把 n1到n2 行内容搬到第 n3 行后
命令模式 • 5、搜索字符串 • /pattern 移至下一个包含pattern的行 • ?pattern 移至上一个包含pattern的行 • / 往下重复查找 • ? 往上重复查找 • n 在同一方向重复查找 • N 在相反方向重复查找 • /pattern/+n 移至下一个pattern所在行后的第n行 • ?pattern?-n 移至上一个Pattern所在行前的第n行 • 6、其他 • u 撤销前一条命令的结果 *. $ ^ [ ] { } \ / 包含在查找字符串中,要用转义字符(\ )
末行模式 • 1、文件的保存和退出 :w 保存 :q 退出 :w! 强制保存 :q! 强制退出 :wq 保存退出 :wq! 强制保存退出
末行模式 • 2、字符串的替换 :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1 :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1 :g/str1/s//str2/g 功能同上
末行模式 • 其他: : n 将光标移到第 n 行 编辑多个文件 vi file1 file2 … :n 编辑下一个文件 :e filename 编辑指定文件
Linux下函数库(1/3) • 一个“程序函数库”就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。可分为两种类型: • 静态函数库(static libraries):是一个普通的目标文件的集合,一般用“.a”作为文件的后缀。静态函数库和共享函数库相比有很多的缺点,占用内存空间多。但使用ELF格式的静态库函数生成的代码可以比使用共享函数库的程序运行速度上快一些。 • 可以用ar这个程序来创建一个静态函数库文件,或者往一个已经存在地静态函数库文件添加新的目标代码。 例如, 把file1.o和file2.o加入到my_library.a这个函数库文件: ar rcs my_library.a file1.o file2.o 然后运行 ranlib,以给库加入一些索引信息
Linux下函数库(2/3) • 共享函数库(shared libraries):当一个可执行程序在启动的时候被加载的函数。每个共享函数库都有个特殊的名字,称作“soname”。soname名字命名必须以“lib”作为前缀,然后是函数库的名字,然后是“.so”,最后是版本号信息。 • 优点:多进程使用同一函数库;修改函数库不需重新连编。 • 安装一个新版本的函数库的时候,要先将这些函数库文件拷贝到一些特定的目录中,运行ldconfig就可以。ldconfig检查已经存在的库文件,然后创建soname的符号链接到真正的函数库,同时设置/etc/ld.so.cache这个缓冲文件。 例如,创建两个目标文件(a.o和b.o),然后创建一个包含a.o和b.o的共享函数库。 • gcc -fPIC -g -c -Wall a.cgcc -fPIC -g -c -Wall b.cgcc -shared -Wl,-soname,liblusterstuff.so.1 -o liblusterstuff.so.1.0.1 a.o b.o –lc • 注:” -fPIC ”是位置无关参数, ”-g”和“-Wall”参数不是必须的。
Linux下函数库(3/3) • 函数库和头文件的保存位置 • a. 函数库 • /lib:系统必备共享函数库 • /usr/lib:标准共享函数库和静态函数库 • /usr/i486-linux-libc5/lib:libc5 兼容性函数库 • /usr/X11R6/lib:X11R6 的函数库 • /usr/local/lib:本地函数库 • b. 头文件 • /usr/include:系统头文件 • /usr/local/include:本地头文件 • c. 共享函数库的相关配置和命令 • /etc/ld.so.conf:包含共享库的搜索位置 • ldconfig:共享库管理工具,一般在更新了共享库之后要运行该命令 • ldd:可查看可执行文件所使用的共享函数库
使用GNU cc开发应用程序 • gcc的简介 • 可执行文件的格式 • gcc的使用