第五章 Vim的命令行模式

来源:互联网 发布:怎样修改淘宝销量显示 编辑:程序博客网 时间:2024/06/06 03:47
命令行模式执行的命令被称作为Ex命令

操作缓冲区文本的Ex命令     
命令用途:[range] delete[x]删除指定范围内的行[到寄存器x中]:[range] yank [x]复制指定范围的行【到寄存器x中】:[line] put [x]在指定行后粘贴寄存器x中的内容:[range] cope {address}在指定范围内的行拷贝到{address}所指定的行之下:[range] move {address}在指定范围内的行移动到{address}所指定的行之下:[range] join 连接指定范围内的行:[range] normal {commands}对指定范围内的每一行执行普通模式命令{commands}:[range] subsitute/{pattern}/{string}/[flags]对指定范围内出现的{pattern}替换为{string}:[range] golbal/{pattern}/[cmd]对指定范围内匹配{pattern}的所有行,在其上执行Ex命令{cmd}  

3G,移动到三行 :h G

:print
:delete
:join
:substitute
:normal


用地址指定一个范围
:{start},{end}

:%p  符号也有特殊的含义,它代表当前文件中的所有行
VG 进入可视模式选择到结尾,命令行上会填充一个范围:’<,’>。这个范围看起来有点晦涩难懂,不过你可以简单的把它理解为一个代表高亮选区的范围。符号’<是代表高亮选区首行的位置标记,而’>则代表即使在退出可视模式后仍然存在。

用模式指定范围
:/<html>/,/<\/html>/p
:/<html>/+1,/<\/html>/-1p
{start},{end} {start}地址是模式/<html>/,而{end}地址是/<\/html>/。
:{address}+n

:.,.+3p

构建Ex命令的地址及范围的符号进行了总结     
符号地址1文件的第一行$文件的最后一行0虚拟行,位于文件第一行上方.光标所在行’m包含位置标记m的行‘<高亮选区的起始行‘>高亮选区的结束行%整个文件(:1,$的简写形式)

[range] copy {address}
:6copy. 复制第六行到当前行
:copy <=> :t <=> :co

:t的一些应用实例 复制
命令用途:6t.把第6行复制到当前行的下方:t6把当前行复制到第6行的下方:t.为当前行创建一个副本(类似于普通模式下得ypp):t$把当前行复制到文本结尾:’<,’>t0把高亮选中的行复制到文件开头

:m 命令移动行    (dGp)删除行并复制到文件的末尾

在制定范围上执行普通命令模式
:normal 普通命令模式
:%normal A; 告诉vim在文件的每行的结尾都添加一个分号。再做此修改时会切换到插入模式,但是在修改完后Vim会自动返回到普通模式。
:%normal i//

重复上次的Ex命令
.重复上次普通模式的命令
@:重复上次的Ex命令

自动补全Ex命令
=> :col<C-d>     //<C-d>命令列出所有的可用选项
当’wildmenu’选项被启用时,Vim会提供一个补全导航列表。我们可以按<Tab>、<C-n>或<Right>正向遍历其列表项,也可以用<S-tab>、<C-p>或<left>对其进行反向遍历。

把当前单词插入到命令行中
<C-r><C-w>映射项会复制光标下单词并把它插入到命令行中。
:%s//<C-r><C-w>/g
<C-r><C-w>用于插入光标下的单词

回溯历史命令
vim不仅会记录Ex命令的历史,它也会为查找命令单独保存一份历史记录。在按/调查出查找提示符后,用<Up>和<Down>键就可以正向或反向遍历之前的查找记录。
<Up>:可以用<C-p>
<Down>:可以用<C-n>


打开命令行窗口的几种方式:
命令动作q/打开查找命令历史的命令行窗口q:打开Ex命令历史的命令行窗口<Ctrl-f>从命令行模式切换到命令行窗口


运行shell命令
: !{cmd} 这种语法适用于执行一次性命令,
:shell 命令来启动一个交互的shell会话
在Vim的命令行模式中,给命令加一个叹号前缀(:h :!)就可以调用外部程序。如果想查看当前目录的内容,可以运行下面的命令:
=> : !ls
: !ls 调用的是shell中的ls命令,:ls调用的是Vim的内置命令

在Vim中操作时,我们能很方便地调用shell命令。下表选取了 最有用的一些调用外部命令的方式     
命令用途:shell启动一个shell(输入exit返回vim): !{cmd}在shell中执行{cmd}:read !{cmd}在shell中执行{cmd},并把其标准输出插入到光标下方:[range] write !{cmd}在shell中执行{cmd},以[range]作为其标准输入:[range] ! {filter}使用外部程序{filter}过滤指定的[range]




0 0