| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5272 人关注过本帖
标题:在VIM中怎样执行外部命令,另存文件,保存文件
只看楼主 加入收藏
槿儿
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-23
结帖率:100%
收藏
 问题点数:0 回复次数:13 
在VIM中怎样执行外部命令,另存文件,保存文件
在VIM中怎样执行外部命令,另存文件,保存文件
2012-09-25 19:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
等vim大神来给我们长知识
2012-09-25 21:58
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:57
帖 子:2012
专家分:7306
注 册:2007-12-17
收藏
得分:0 
保存文件
:w newfile.txt

执行外部命令
:!ls

:!cd /usr/local

:!rm newfile.txt

那一年,苍井空还是处女
2012-09-25 22:18
madfrogme
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
好像
:sav newfile
也可以

The quieter you become, the more you can hear
2012-09-25 22:26
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
三电铃 已经回答了一部分了。我再补充一些:

最基本的执行外部命令方法是
:!{cmd}
就会在 shell 里执行 {cmd} 这个命令。{cmd} 可以不止一条指令,管道也可以使用,比如:
:!ls | less

如果想获取某个命令的输出,方法是用 :r 指令,比如:
:r !ls
会把 ls 的输出,插入到当前缓冲区光标所在的行下。

如果当前缓冲区的内容是 bash 指令。比如你的缓冲区内容是单独一行的 ls。那么执行:
:w !bash
可以直接把缓冲区的内容送去执行。这里相当于执行一下 ls 命令。

以上是执行外部指令的一些常用方法。
其实要想截获内部命令的输出,或者将当前缓冲区的内容作为内部命令执行,会需要更多技巧。好在楼主没问。


保存文件的最基本指令是
:w
可以指定一个文件名,就相当于另存为了,比如:
:w abc.txt
会将当前文件保存成一个名为 abc.txt 的文件。

也可以用 :f abc.txt 来开辟一个新的缓冲区,并以 abc.txt 为名。
这和 :w 命令有一些区别。详细情况请自行
:h :w
:h :f
察看。

另外 :wq 或 :x 是存盘并退出(助记符是 Write and Quit 和 eXit)。
如果有多个编辑缓冲区,可以用 :wqa 或 :xa 来全部保存退出(助记符是 Write and Quit All 和 eXit All)。
鉴于存盘退出或不存盘退出使用极为频繁,分别有非冒号命令 ZZ 和 ZQ 对应存和不存盘退出。
2012-09-25 22:53
madfrogme
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
想请教,没看懂这条
如果当前缓冲区的内容是 bash 指令。比如你的缓冲区内容是单独一行的 ls。那么执行:
:w !bash
可以直接把缓冲区的内容送去执行。这里相当于执行一下 ls 命令。

我怎样知道缓冲区里是什么?

The quieter you become, the more you can hear
2012-09-25 23:30
槿儿
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-23
收藏
得分:0 
回复 3楼 外部三电铃
谢谢了
2012-09-26 09:37
槿儿
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-23
收藏
得分:0 
回复 5楼 pangding
谢谢
2012-09-26 09:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用madfrogme在2012-9-25 23:30:40的发言:

想请教,没看懂这条
如果当前缓冲区的内容是 bash 指令。比如你的缓冲区内容是单独一行的 ls。那么执行:
:w !bash
可以直接把缓冲区的内容送去执行。这里相当于执行一下 ls 命令。
 
我怎样知道缓冲区里是什么?

是说你有一个文件本身就是个脚本,按说你不是可以直接在 bash 里 $ bash script.sh 或者 $ ./script.sh 执行吗?
如果你已经用 vi 打开了这个脚本呢?又做了一些改动,那么就可以用 :w !bash 来执行这个脚本。执行之后文件内容不变,如果有输出,会直接输出在 bash 里。

我之前的例子是说,如果你有一个文件,或者是尚未保存的文件(即是一个 vim 缓冲区)也可以,全部内容就是单独的一行 ls。
此时你如此执行,外部 bash 里打印了 ls 输出的结果。这个文件还是单独的一行 ls。


[ 本帖最后由 pangding 于 2012-9-26 11:10 编辑 ]
2012-09-26 11:09
madfrogme
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
以下是引用pangding在2012-9-26 12:09:31的发言:


是说你有一个文件本身就是个脚本,按说你不是可以直接在 bash 里 $ bash script.sh 或者 $ ./script.sh 执行吗?
如果你已经用 vi 打开了这个脚本呢?又做了一些改动,那么就可以用 :w !bash 来执行这个脚本。执行之后文件内容不变,如果有输出,会直接输出在 bash 里。

我之前的例子是说,如果你有一个文件,或者是尚未保存的文件(即是一个 vim 缓冲区)也可以,全部内容就是单独的一行 ls。
此时你如此执行,外部 bash 里打印了 ls 输出的结果。这个文件还是单独的一行 ls。


试了一下,果然如此,谢谢指点了

The quieter you become, the more you can hear
2012-09-26 11:30
快速回复:在VIM中怎样执行外部命令,另存文件,保存文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022345 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved