⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usr_10.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 2 页
字号:
	include main.one ~	include main.two ~	include main.three ~	include main.four ~如果选中的块经过一个短行,并且这行没有任何内容包括在可视块中,则新的文本不会被插入到该行中。例如,对于下面的例子,用可视块选中第一和第三行的 "long",这样第二行的文本将不会被包括在可视块中:	This is a long line ~	short ~	Any other long line ~		  ^^^^ 用可视块选中的部分现在输入 "Ivery <esc>"。结果将是:	This is a very long line ~	short ~	Any other very long line ~可以注意到,第二行中没有插入任何文本。如果插入的文本中包括一个新行,则 "I" 命令的效果与普通插入语句一样,只影响第一行。"A" 命令的效果与 "I" 命令一样,只是把文字插入可视块的右边。    "A" 在如下情况会有一些特别:选中一个可视块然后用 "$" 命令使可视块扩展到行尾。然后用 "A" 命令插入文本,文件将被插入到 "每一行" 的行尾。    还是用上面的例子,在选中可视块后输入 "$A XXX<Esc>",结果将是:	This is a long line XXX ~	short XXX ~	Any other long line XXX ~出现这个效果完全是 "$" 命令的作用,Vim 能记住这个命令,如果你用移动命令选中相同的可视块,是不会有这样的效果的。修 改 文 本可视块中的 "c" 命令会删除整个可视块并转入 "插入" 模式,使你可以开始文本,这些文本会被插入可视块经过的每一行。    在上面的例子中,如果仍选中包括所有 "long" 的一个可视块,然后输入"c_LONG_<Esc>",结果会变成:	This is a _LONG_ line ~	short ~	Any other _LONG_ line ~与 "I" 命令一样,短的一行不会发生变化。而且在插入的过程中,你不能断行。"C" 命令从块的左边界开始删除所有行的后半段,然后状态切换到 "插入" 模式让你输入文本。新的文本被插入到每一行的末尾。    在上面的例子中,如果命令改为 "Cnew text<Esc>",你将获得这样的结果:	This is a new text ~	short ~	Any other new text ~可以注意到,尽管只有 "long" 被选中,它后面的内容也被删除了。所以在这种情况下,块的左边界才是有意义的。    同样,没有包括在块中的行不会受影响。还有一些命令只影响被选中的字符:	~       交换大小写      (a -> A 而 A -> a)	U       转换成大写      (a -> A 而 A -> A)	u       转换成小写      (a -> a 而 A -> a)以 一 个 字 符 填 充要以某一个字符完全填充整个块,可以使用 "r" 命令。再次选中上例中的文本,然后键入 "rx":	This is a xxxx line ~	short ~	Any other xxxx line ~	Note:	如果你要在可视块中包括行尾之后的字符,请参考25章的 'virtualedit' 特性。平 移">" 命令把选中的文档向右移动一个 "平移单位",中间用空格填充。平移的启始点是可视块的左边界。    还是用上面的例子,">" 命令会导致如下结果:	This is a	  long line ~	short ~	Any other	  long line ~平移的距离由 'shiftwidth' 选项定义。例如,要每次平移 4 个空格,可以用这个命令:>	:set shiftwidth=4"<" 命令向左移动一个 "平移单位",但在移动的的距离是有限的,因为它左边的不是空白字符的字符会挡住它,这时它移到尽头就不再移动。连 接 若 干 行"J" 命令连接被选中的行。其实就是删除所有的换行符。其实不只是换行符,行前后的多余空白字符会一起被删除而全部用一个空格取代。如果行尾刚好是句尾,就插入两个空格(参见'joinspaces'选项)    还是用那个我们已经非常熟悉的例子,这回的结果将是:	This is a long line short Any other long line ~"J" 命令其实不关心选中了哪些字符,只关心块涉及到哪些行。所以可视块的效果与"v" 和 "V" 的效果是完全一样的。如果你不想改变那些空白字符,可以使用 "gJ" 命令。=============================================================================*10.6*	读、写文件的一部分当你在写一封 e-mail,你可能想包括另一个文件。这可以通过 ":read {filename}" 命令达到目的。这些文本将被插入到光标的下面。    我们用下面的文本作试验:	Hi John, ~	Here is the diff that fixes the bug: ~	Bye, Pierre. ~把光标移到第二行然后输入:>	:read patch名叫 "patch" 的文件将被插入,成为下面这个样子:	Hi John, ~	Here is the diff that fixes the bug: ~	2c2 ~	<	for (i = 0; i <= length; ++i) ~	--- ~	>	for (i = 0; i < length; ++i) ~	Bye, Pierre. ~":read" 支持范围前缀。文件将被插入到范围指定的最后一行的下面。所以":$r patch" 会把 "patch" 文件插入到当前文件的最后。    如果要插入到文件的最前面怎么办?你可以把文本插入到第 0 行,这一行实际上是不存在的。在普通的命令的范围中如果你用这个行号会出错,但在 "read" 命令中就可以:>	:0read patch这个命令把 "patch" 文件插入到全文的最前面。保 存 部 分 行要把一部分行写入到文件,可以使用 ":write" 命令。在没有指定范围的时候它写入全文,而指定范围的时候它只写入范围指定的行:>	:.,$write tempo这个命令写入当前位置到文末的全部行到文件 "tempo" 中。如果这个文件已经存在,你会被提示错误。Vim 不会让你直接写入到一个已存在的文件。如果你知道你在干什么而且确实想这样做,就加一个叹号:>	:.,$write! tempo小 心:"!" 必须紧跟着 ":write",中间不能留有空格。否则这将变成一个过滤器命令,这种命令我们在本章的后面会介绍。添 加 内 容 到 文 件 中本章开始的时候介绍了怎样把文本添加到寄存器中。你可以对文件作同样的操作。例如,把当前行写入文件:>	:.write collection然后移到下一个位置,输入:>	:.write >>collection">>" 通知 Vim 把内容添加到文件 "collection" 的后面。你可以重复这个操作,直到获得全部你需要收集的文本。=============================================================================*10.7*	编排文本在你输入纯文本时,自动换行自然会是比较吸引的功能。要实现这个功能,可以设置'textwidth' 选项:>	:set textwidth=72你可能还记得在示例 vimrc 文件中,这个命令被用于所有的文本文件。所以如果你使用的是那个配置文件,实际上你已经设置这个选项了。检查一下该选项的值:>	:set textwidth现在每行达到 72 个字符就会自动换行。但如果你只是在行中间输入或者删除一些东西,这个功能就无效了。Vim 不会自动编排这些文本。    要让 Vim 编排当前的段落:>	gqap这个命令用 "gq" 开始,作为操作符,然后跟着 "ap",作为文本对象,该对象表示"一段"(a paragraph)。"一段" 与下一段的分割符是一个空行。	Note:	一个包括空白字符的空行不能分割 "一段"。这是很不容易分辨的。除了用 "ap",你还可以使用其它 "动作" 或者 "文本对象"。如果你的段落分割正确,你可以用下面命令格式化整个文档:>	gggqG"gq" 跳转到第一行,"gq" 是编排操作符,而 "G" 是跳转到文尾的 "动作" 命令。如果你没有清楚地区分段落。你可以只编排你手动选中的行。先移到你要格式化的行,执行 "gqj"。这会编排当前行和下面一行。如果当前行太短,下面一行会补上来,否则多余的部分会移到下面一行。现在你可以用 "." 命令重复这个操作,直到编排完所有的文本。=============================================================================*10.8*	改变大小写你手头有一个分节标题全部是小写的。你想把全部 "section" 改成大写的。这可以用"gU" 操作符。先在第一列执行:>			     gUw<	段首    	    ---->      SECTION header"gu" 的作用正好相反:>			     guw<	SECTION header	    ---->      section header你还可以用 "g~" 来交换大小写。所有这些命令都是操作符,所以它们可以用于"动作"命令,文本对象和可视模式。    要让一个操作符作用于当前行,可以执行这个操作符两次。例如,"d" 是删除操作符,所以删除一行就是 "dd"。相似地,"gugu" 使整一行变成小写。这可以缩成"guu"。"gUgU" 可以缩成 "gUU" 而 "g~g~" 则是 "g~~"。例如:>				g~~ <	Some GIRLS have Fun    ---->   sOME girls HAVE fUN ~=============================================================================*10.9*	使用外部程序Vim 有一套功能非常强大地命令,可以完成所有功能。但有些东西可以外部命令能够完成得更好或者更快。    命令 "!{motion}{program}" 用一个外部程序对一个文本块进行过滤。换句话说,它执行一个由 {program} 指定的外部命令,并用一个文本块作为输入,然后用该程序的输出代替选中的文本块。    如果你不熟悉 UNIX 的过滤程序,上面的描述可以说是比较糟糕的。我们这里举个例子来说明一下。sort 命令能对一个文件排序。如果你执行下面的命令,未排序的文件input.txt 会被排序并写入 output.txt。(这在 UNIX 和 Microsoft Windows 中都有效)>	sort <input.txt >output.txt现在在 Vim 中完成相同的功能。假设你要对 1 到 5 行排序。你可以先把光标定位在第一行,然后你执行下面的命令:>	!5G"!" 告诉 Vim 你正在执行一个过滤操作。然后 Vim 编辑器等待一个 "动作" 命令来告诉它要过滤哪部分文本。"5G" 命令告诉 Vim 移到第5行。于是,Vim 知道要处理的是第1行(当前行)到第 5 行间的内容。    由于在执行一个过滤命令,光标被 Vim 移到了屏幕的底部,并显示一个 "!" 作提示符。现在你可以输入过滤程序的名字,在本例中就是 "sort" 了。因此,你整个命令将是:>	!5Gsort<Enter>这个命令的结果是 sort 程序用前 5 行作为输入执行,程序的输出替换了原来的 5 行。	line 55			      line 11	line 33			      line 22	line 11		-->	      line 33	line 22			      line 44	line 44			      line 55	last line		      last line"!!" 命令用于对当前行执行过滤命令。在 Unix 中,"date" 命令能打印当前的时间和日期,所以,"!!date<Enter>" 用 "date" 的输出代替当前行。这在为文件加入时间戳的时候非常有用。如 果 命 令 不 执 行 怎 么 办启动一个 shell,输入一个命令并捕获它的输出,这需要 Vim 知道这个 shell 程序是怎么工作的。如果你要使用过滤程序,你最好需要检查一下下面的选项:	'shell'		指定 Vim 用于执行外部命令的 shell。	'shellcmdflag'	传给 shell 的参数	'shellquote'	shell 程序使用的引号 (用于引用命令)	'shellxquote'	用于命令和重定向文件名的引号	'shelltype'	shell 程序的类型 (仅用于Amiga)	'shellslash'	在命令中使用正斜杠(仅用于 MS-Windows 和相似系统)	'shellredir'	用于把命令输出写入文件所使用的字符串在 Unix 下,这几乎不是问题。因为总共只有两种 shell 程序:"sh" 类的和 "csh"类的。Vim 会检查选项 'shell',并根据它的类型自动设置这些参数。   但在 MS-Windows 下,有很多不同的 shell 程序,所以你必须修改这些 shell程序以便过滤功能正常执行。详细情况请参考相应选项的帮助。读 入 一 个 命 令 的 输 出要把当前目录的内容读进文件来,可以用如下命令:Unix 上: >	:read !ls<MS-Windows 上: >	:read !dir"ls" 或者 "dir" 的输出会被捕获并插入到光标下面。这好像读入一个文件一样,但是需要加上一个 "!" 让 Vim 知道后面是一个命令。    这些命令还可以带参数。而且前面还可以带一个范围用于告诉 Vim 把这行放在什么地方:>	:0read !date -u这将用 UTC 格式把当前的时间插入到文件开头。(当然了,你的 date 命令必须能够接受-u 选项。) Note 这与 "!!date" 的区别:"!!date" 替代一行,而":read !date" 插入一行。把 文 本 输 出 到 一 个 命 令Unix 命令 "wc" 用于统计单词数目。要统计当前文件有多少个单词,可以这样:>	:write !wc这和前面的写入命令一样,但文件名前面改为一个 "!" 用于告诉 Vim 后面是一个要被执行的外部命令。被写入的文本将作为指定命令的标准输入。这个输出将是:       4      47     249 ~"wc" 命令惜字如金。这表示你有 4 行,47 个单词和 249 个字符。注意不要错写成:>	:write! wc这会强制把当前文件存到当前目录的 "wc" 文件中。在这里空格的位置是非常重要的!重 画 屏 幕如果外部程序产生一个错误信息,屏幕显示就会乱掉。Vim 颇重效率,所以它只刷新那些需要刷新的地方。可是它不可能知道其它程序修改了哪些地方。要强制 Vim 重画整个屏幕:>	CTRL-L=============================================================================下一章:|usr_11.txt|  从崩溃中恢复版权:参见|manual-copyright|  vim:tw=78:ts=8:ft=help:norl:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -