当前位置:  技术问答>linux和unix

VI/VIM高级技巧征集中,欢迎大家来交流,谢绝灌水!

    来源: 互联网  发布时间:2017-04-23

    本文导语:  本帖最后由 mymtom 于 2010-12-13 09:24:50 编辑 偶然看到2003年有这样的帖子。翻出来重贴!准备好好整理一下! http://topic.csdn.net/t/20030429/18/1723102_2.html :r !command 将command的输出插入到当前位置。 | ...

本帖最后由 mymtom 于 2010-12-13 09:24:50 编辑
偶然看到2003年有这样的帖子。翻出来重贴!准备好好整理一下!
http://topic.csdn.net/t/20030429/18/1723102_2.html

:r !command

将command的输出插入到当前位置。

|
很久以前在某个blog中挖到的..

vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
  :s/vivian/sky/ 替换当前行第一个 vivian 为 sky
  :s/vivian/sky/g 替换当前行所有 vivian 为 sky
  :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
  :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
  n 为数字,若 n 为 .,表示从当前行开始到最后一行
  :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
  :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
  可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
  :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
  :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
  * ************************************
  1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
  :s/vivian/sky/g 替换当前行所有 vivian 为 sky
  2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
  :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
  (n 为数字,若 n 为 .,表示从当前行开始到最后一行)
  3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
  :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
  4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
  :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
  5. 删除文本中的^M
  问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
  · 使用命令:cat filename1 | tr -d “^V^M” >newfile;
  · 使用命令:sed -e “s/^V^M//” filename >outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
  · 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。
  · :%s/^M$//g
  如果上述方法无用,则正确的解决办法是:
  · tr -d "r" dest
  · tr -d "5" dest
  · strings A>B
  6. 其它
  利用 :s 命令可以实现字符串的替换。具体的用法包括:
  :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 功能同上
  从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
  字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。


|
好贴~ 俺也出一分力!!!!!!!
打开 vi
vi file 打开或新建文件 file
vi file1 file2 ... 打开或新建多个文件
vi ­R file 以只读方式打开文件 file
vi ­r file 修复最近异常关闭的文件 file
view file 以只读方式打开文件 file
vi + file 打开文件 file ,将光标定位到文件最后一行
vi +n file 打开文件 file ,将光标定位到文件的第 n 行
vi +/pattern file 打开文件 file ,将光标定位到第一个匹配 pattern 的行
保存文件、退出 vi
:wq, ZZ, :x 保存文件,退出 vi
:w, :w! 保存当前文件, ! 表示忽略写保护
:w newfile 将文件另存为 newfile
:w %.new 将文件另存为原文件名 +.new 后缀名的文件
:20,100w newfile 将当前文件的 20­100 行的内容存入新文件 newfile
:20,100w>>afile 将当前文件的 20­100 行的内容追加到文件 afile 末尾
:q, :q! 不保存退出,不保存强行退出
Q 退出 vi ,进入 ex 模式
:vi 退出 ex 模式,进入 vi
:r afile 将文件 afile 的内容读入、追加到当前行下
:nr afile 将文件 afile 的内容读入、追加到第 n 行下
:e newfile 不离开 vi ,编辑新文件 newfile
:n 编辑下一个( n­next )文件(针对多文档编辑的情况)
移动光标
h, j, k, l
光标分别向左、下、上、右移动一个字符,而: 5h 光标向左移动 5
个字符
文字
w, W, b, B 光标向前、向后移动一个单词,而: 2w 光标向前移动 2 个单词
e, E 光标移到下个单词的词尾
), ( 光标移到下句、上句的句首
}, { 光标移到下个、上个段落开始之处
]], [[ 光标移到下个、上个章节开始之处
指定行号
:n 光标移到第 n 行
nG 光标移到第 n 行
G 光标移到文件末行
[CTRL­G] 显示文件的总行数、当前行号、列号等信息
通过搜索定位(命令 less 同样支持)
/pattern , ?pattern 由前往后、从后往前查找 pattern
/,? 由前往后、从后往前继续上一次查找(注意与上行的操作对应)
n,N 按上一次的顺序、按上一次相反的顺序继续上次查找

[RETURN] 光标移到下行行首第一个非空白字符
0, $ 光标移到当前行首、行尾
^ 光标移到当前行第一个非空白字符
+, ­ 光标移到下一行、上一行行首第一个非空白字符
n| 光标移到当前行第 n 列
H 光标移到当前屏幕第一行
M 光标移到当前屏幕中间
L 光标移到当前屏幕最后一行
编辑
i, a 在光标之前、之后插入文字
I, A 在当前行的行首、行尾插入文字
o, O 在当前行之下、之上新建一行,插入文字
修改
~ 转换光标所在位置的字符的大小写
r 替代单个字符
R 替代(覆盖)文字
cw 修改单词,如: 3cw 修改 3 个单词
cc 修改当前行
C 修改光标所在位置的字符到行尾的内容
s 替代:删除当前字符,插入新的字符
S 替代:删除当前行,插入新内容
x, X 删除光标所在位置、光标之前的字符,而: 5x 删除 5 个字符
dw 删除光标所在位置的单词,而: 2dw 或 d2w 删除 2 个单词
dd 删除当前行,而: 5dd 或 d5d 删除 5 行
D 删除光标所在位置到行尾的所有内容
复制 (yank)
yw 复制单词,而: 3yw 或 y3w 复制 3 个单词
yy 复制当前行,而: 2yy 或 y2y 复制 2 行
粘贴
p ( 小写 ) 将删除、复制的内容插入到光标所在位置之后
P ( 大写 ) 将删除、复制的内容插入到光标所在位置之前
.  重复上一次编辑命令
u, U 撤销上一次操作、恢复当前行
:d 删除行, :d 删除当前行; :12d 删除第 12 行; :5,8d 删除 5­8行
:m 移动行, :m12 将当前行移到 12 行下; :4m12 将第 4 行移到 12行下; :5,8m16 将 5­8 行移到 16 行下
:co  或 :t 复制行, :co12 将当前行复制到 12 行下; :4co12 将第 4 行复制到 12 行下; :5,8co16 将 5­8 行复制到 16 行下
:.,$d 删除当前行到文件末尾所有内容
:30,60m0 将第 30 行至第 60 行移动到文件头部
:.,/pattern/co$ 将当前行至下面第一个匹配 pattern 的行复制到文件末尾
样式匹配及替换
:s/pattern/new­str/
:s/pattern/new­str/g
(g :表示全部,下同 )
将当前行中第一个匹配 pattern 的字符串替换为 new­str
将当前行中所有匹配 pattern 的字符串替换为 new­str在指定范围中匹配
:5,26s/pattern/new­str/g
将 5­-26 行中所有匹配 pattern 的字符串替换为 new­str
全局范围中匹配
:%s/pattern/new­str/g 将整个文件中所有匹配 pattern 的字符串替换为 new­str , % 代表所有行 (1,$)
:g/pattern/s//new­str/g 同上
:g/pattern/s/old­str/new­str/g 在整个文件中,将匹配 pattern 的行中的所有 old­str 替换成newstr

代码补全: CTRL+­P
与 Shell 交互
:sh 切换到 shell
^D 在 shell 环境中按 ctrl­D 返回 vi
:! command 在 vi 中临时执行 shell 命令 command
:n,m! command 将 shell 命令 command 的输出替换 n­m 行的内容
:r !command 将 shell 命令 command 的输出追加到当前行下
常用的设置
:set nu 显示行号
:syntax on 开启语法高亮(编辑各类代码很有用)
:set autoindent 自动缩进
:set smartindent 智能选择对齐方式
:set shiftwidth=4 缩进 4 字符
:set tabstop=4 tab 键的宽度设为 4 字符
:set softtabstop=4 移动光标时 tab 键的字符数,不影响插入 tab 键的宽度
:set expandtab 将 tab 转换成指定数量的空格
:set showmatch 高亮显示匹配的括号
如果想让这些设置能在下一次打开 vi 中使用,我们可以将这些设置写入
~/.vimrc 文件,写入文件时不要冒号( : )











|
我常用的是gg=G,呵呵,整理代码格式

|
set foldmethod=indent
zR
zM

|
好贴 先占个座


|
楼上的折叠我也经常用
set foldmethod=indent  "折叠方式设置
map  zO

另外我不喜欢鼠标闪烁
set gcr=a:block-blinkon0  ""取消鼠标闪烁

另外还有同时看两个文件 :vsp

|
sp   hello.c

|
查找的时候
set hls
然后*在要查找的字符上

|
复制n行
nyy

删除n行
ndd

找对应的{}
光标放在一个{}上,按'%',找到相对应的另一个{},

找单词
光标所在的单词上按'*' 可将此文件中光标所在的单词显示高亮,按N,n进行查找.

gg--->首行

G--->尾行




|
好多哀~
45G 跳到45行
G跳到最后一行
$行尾

......不知道自己说的高级不,我很菜
好像有本vim 101 hacks不错

|
ctrl+b   屏幕后翻动一页
ctrl+u   屏幕后翻动半页
ctrl+f   屏幕前翻动一页
ctrl+d   民间幕前翻动半页

|
n     光标下移n行
:e!          重新加载文件
:w [filename] 另存一个名为filename的文件

|
按 V 选中一些行,然后按 ‘=’ 这些代码就自动对齐了。

|
整理这个还是有难度的。各种技巧太多了,如果不经常用很快就会忘了。看到哪个好用的,必须强化的多用几次才记得住。
不知道怎么算高级,随便贴一点吧:

w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏

|
再贴一点。有好多都没用过。刚才试了几个,挺好玩的,不过还是记不住

依字母顺序的vi快速参考
# (这里#代表一个数字) 执行n次后面的命令...
: 进入ex模式
) 下一句
( 上一句
} 下一段
{ 上一段
]] 下一节
[[ 上一节
0 行的开头
$ 行的末尾
^ 行的第一个非空白字符
+ 下一行的开头
- 上一行的开头
(空格) 下一个字符
(回车) 下一行
/ 向前搜索
? 向后搜索
% 查找当前小(中,大)括号的匹配字符
, 逆向重复上一个f,F,t或T操作
; 重复上一个f,F,t或T操作
. 重复上一个操作
` 转到标记处
' 转到标记所在行的开头
`` 查找前回到上一个做标记的地方
' 查找前回到上一个做标记所在行的开头
~ 切换字符的大小写
" 保存到寄存器中
!! 重复上一次SHELL命令
! 把后面的文本送给命令, 取代输出(例如, !}fmt把当前的段落
送给命令fmt处理,然后用fmt返回的东西替换输出.)
>> 右移当前段落一个移动宽度(shiftwidth)

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux/CentOS/fedora下vim显示的字符编码设置
  • 只有vim.gtk或vim.gnome才能使用系统全局粘贴板,默认的vim.basic看不到+号寄存器
  • VIM的Rails编辑插件 rails.vim
  • 使用命令“locate xxxx | xargs vim ”退出vim后,终端无法响应输入!
  • 为了安装vimgdb,编译安装了vim72后,怎样在终端输入vim后启动中文版?
  • VIM高手进来看,vim中出现了奇怪的颜色。
  • 我对 VIM 的抱怨?也是我没有用好 VIM 的一些问题。
  • vim生成的.cpp~是什么文件?我使用vim编辑的时候出现了好多.cpp~文件
  • 关于Vim的使用问题,怎么让Vim启动时运行某一命令
  • 使用http://vim.spf13.com/配置vim打开文件出错
  • code_complete.vim與supertab.vim有hotkey衝突
  • vim问题,怎么不启动shell窗口,而只是把shell结果放到vim自身的command 栏里去?
  • 关于Vim的使用问题,怎么加Vim建立的程序文件中,自动添加初始化注释
  • vim插件 nerdtree.vim
  • 因为开启了文件类型检测,Vim在打开或新建一个文件时会自动判断文件的扩展名以确定文件类型,在$VIMRUNTIME/filetype.vim中搜索"Makefi
  • 大家帮忙给几个vim比较好用的插件
  • vim安装的问题
  • redhat linuxAS4 vim的安装目录
  • Linux下的vim程序在哪个目录下面?
  • Vim里面的一些脚本问题
  • 安装VIM后替换VI


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,