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

mymtom 2010-12-13 09:20:07
加精
偶然看到2003年有这样的帖子。翻出来重贴!准备好好整理一下!
http://topic.csdn.net/t/20030429/18/1723102_2.html

:r !command

将command的输出插入到当前位置。
...全文
8160 154 打赏 收藏 转发到动态 举报
写回复
用AI写文章
154 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2013-09-06
  • 打赏
  • 举报
回复
自己总结的一些常用命令,希望对大家有用: 1. 生成TAGS使用的Makefile ======================================================================== TAGDIRS = \ dir1 \ dir2 \ file1 \ file2 tag: find ${TAGDIRS} \( -type f -o -type l \) \ \( -name "*.[ch]" -o -name "*.ec" -o -name "*.pc" \) \ > cscope.files ctags -L cscope.files \ --c-kinds=+px --fields=+iaS --extra=+q --language-force=c cscope -i cscope.files -kb ======================================================================== 2. 使用TAB的自动完成 ii - #include <> ic - #include "" ff - #ifndef #define #endif df - #define co - /* */ cc - /**< */ if - if () { } ife - if () { } else { } for - for (;;) {} while - while () {} switch - switch {} 3. 自动完成的三种方式 a. 输入标示符的前几个字符,然后按CTRL-P; b. 输入结构体变量后输入"."或者"->"会显示结构体成员; c. 输入函数名和左括号后按TAB, 显示函数参数。 4. cscope搜索 a. 查找函数(或者变量,宏定义等) :csta main |=========================================================================| |Cscope tag: main | | # 行 文件名 / 上下文 / 行 | | 1 17 vim72/runtime/doc/doctags.c <<main>> | | main(argc, argv) | | 2 1 vim72/runtime/macros/maze/maze.c <<main>> | | char *M,A,Z,E=40,J[40],T[40];main(C){for (*J=A=scanf(M="%d" | | 3 1 vim72/runtime/macros/maze/mazeansi.c <<main>> | | char *M,A,Z,E=40,J[80],T[3];main(C){for (M=J+E,*J=A=scanf(" | | 4 11 vim72/runtime/macros/maze/mazeclean.c <<main>> | | main (C) | | 5 10 vim72/runtime/tools/blink.c <<main>> | | main() | | 6 112 vim72/runtime/tools/ccfilter.c <<main>> | | int main( int argc, char *argv[] ) | | 7 39 vim72/runtime/tools/xcmdsrv_client.c <<main>> | | main(int argc, char **argv) | | 8 163 vim72/src/main.c <<main>> | | main | | 9 443 vim72/src/xxd/xxd.c <<main>> | | main(argc, argv) | | 10 17 vim73/runtime/doc/doctags.c <<main>> | | main(argc, argv) | | 11 1 vim73/runtime/macros/maze/maze.c <<main>> | |-- 更多 -- | |=========================================================================| 第三列 p 表示函数原型(protocol) f 函数定义(function) b. 查找文件 :cs find file name :cs f f name name可以是文件名的一部分部分 5. 在源码中, 光标移动至函数名或全局变量名 Ctrl-] 跳转的函数定义 Ctrl-T 返回 (可以多次) 6. 在源码中, 光标移动至文件名 gf 跳转至相应文件。 7. :ls 显示文件列表 :b1 切换到第一个文件 :b2 切换到第一个文件 8. 光标移动到函数前, :Dox 为函数添加注释 9. 拷贝粘贴 yy 拷贝一行 3yy 拷贝3行 dd 剪切一行 p 粘贴 "r3yy 拷贝3行覆盖到r寄存器 "R3yy 拷贝3行追加到r寄存器 "rp 从r寄存器粘贴 ma 设置标记a 'a 跳转到标记a y'a 拷贝当前位置至标记a的内容 d'a 剪切当前位置至标记a的内容 "rd'a 剪切当前位置至标记a的内容覆盖到寄存器r "Rd'a 剪切当前位置至标记a的内容追加到寄存器r 10. 查看寄存器内容 :reg 查看寄存器内容 说明:vi/vim 有26个命名寄存器(a-z)
shance3c 2013-06-05
  • 打赏
  • 举报
回复
没有可用分了,伤不起啊
灰龙001 2013-04-23
  • 打赏
  • 举报
回复
你们说的是文本模式下的VI么?
mymtom 2013-03-22
  • 打赏
  • 举报
回复
vim中快速插入本地路径 :r !echo /usr/local/apache/htdocs/tmp 路径可以用TAB补全,快速准确。 http://bbs.chinaunix.net/thread-4072033-1-1.html
wallkMan 2013-02-15
  • 打赏
  • 举报
回复
都是些幼儿园的小朋友学画画啊。你写一条命令,就可以看到vim的强大了。 foldvim setlocal foldmethod=expr|setlocal foldexpr=getline(v:lnum)!~'^\\s*function' foldc++ setlocal foldmethod=expr|setlocal foldexpr=getline(v:lnum)!~'^[vC]' .....用正则式可以fold任何一种代码类型
mymtom 2013-02-06
  • 打赏
  • 举报
回复
刚刚上传了个更新过的vim配置,Posix接口的tags更新到(IEEE Std 1003.1-2008)。
http://download.csdn.net/detail/mymtom/5038541
jimette 2012-12-21
  • 打赏
  • 举报
回复
对vi 感兴趣。。
max_min_ 2012-09-27
  • 打赏
  • 举报
回复
下载ctags 和cscopes 这个两个插件,修改下配置文件。 vim就是很强大了
可以跟踪函数。宏,结构体 等的定义和调用。比较方便

对于上面说的vsp怎么用,

vs 左右分页, sp 上下分页
光标在那里 按q 退出那里,only 保留那里

还有我的vim 可以 随意选择某个单词,5种不同颜色高亮显示出来,如果的联系我, 我发配置文件。

下载一个visualmark 可以高亮显示某一行

对于折叠, 我是 set foldmethod=syntax 高亮折叠 ,同时
set foldlevel = 100 开启vim时不自动折叠

对于ctrl+z 以前一直理解为强制对于文件,后来才知道,其实是隐藏文件,之后再fg的时候就是显示隐藏文件,这个功能还是叫强大方便的(谁用谁知道啊!)

现在在上班 就说这么多了, 大家多多交流吧,强大编译环境
  • 打赏
  • 举报
回复
很多快捷键值得我们牢记
Ever_lover 2012-09-25
  • 打赏
  • 举报
回复
插入模式下CTRl+y重复上一行,ggVG全选
jnzw1986 2011-07-15
  • 打赏
  • 举报
回复
《鸟哥的私房菜》这本书中有一章专门讲vi,很好很强大。很值得一看。
xiaobukuai 2011-07-05
  • 打赏
  • 举报
回复
mark
laoshizhuce 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 140 楼 laoshizhuce 的回复:]

有人知道linux下怎么消除vim的光标闪烁吗 非GUI

网上搜索的那个方法是用于windows没问题
[/Quote]

还是没有人知道吗
linsen_519 2011-01-04
  • 打赏
  • 举报
回复
好贴~ 俺也出一分力!!!!!!!
打开 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 文件,写入文件时不要冒号( : )










laoshizhuce 2011-01-04
  • 打赏
  • 举报
回复
有人知道linux下怎么消除vim的光标闪烁吗 非GUI

网上搜索的那个方法是用于windows没问题
histemiss 2010-12-25
  • 打赏
  • 举报
回复
好大的炕啊
gettext 2010-12-24
  • 打赏
  • 举报
回复
normal mode:
K 字典
gg=G indent whole file
Ctrl-A 数字++
Ctrl-X 数字--

insert mode:
Ctrl-X Ctrl-F 插入文件名
Ctrl-X Ctrl-N 插入匹配的word
CTRL-K {char1} {char2} 插入一个特殊符号或digraph, 可以用:dig来显示character


其实最全最准确的是资料是vim自带的help, 按Ctrl-D会有提示
:help Ctrl-A
:help!
:help 42
萤火阳光 2010-12-23
  • 打赏
  • 举报
回复
进来看看
Linux-Torvalds 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 65 楼 niech1112 的回复:]

vim能够自动补全么?
[/Quote]
有相应的插件。
Linux-Torvalds 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 laoshizhuce 的回复:]

引用 42 楼 laoshizhuce 的回复:

借高手问下

我在linux下总是无法安装vim的gui版本gvim,不知道是不是要装什么库


有人会吗,装了好几次了,装完后都是Normal version without GUI
[/Quote]
apt-cache search vim看看
或者
yum search vim
看看你系统源到底提供什么套件。
加载更多回复(108)
用于windows下面的vim编辑器。 给喜欢vim的人使用。详细如下: 好吧,详细点,这里写出一些基本的命令: 【什么是vivi就是linux命令行下的最著名的编辑器之一,(编辑器就是类似windows记事本的功能,不过vi功能比记事本强大无限倍!^_^),现在实际使用的都是vim,它是vi的改进版本,所以现在的vi基本上就是vim了。 【vi能做什么】 第一个功能不用多说,vi可以编辑文本文件。至于其他的功能,多得无法列举,我只说我所知的一些典型的功能应用: (1)编辑文本文件 (2)方便地阅读程序源代码 (3)当文件目录浏览器来用 (4)提供编程、调试环境 (5)利用vi执行一些脚本文件(vi有自己的脚本文件语法) (x)等等等等...... 【vi的操作模式】   vi具有两种基本模式,为输入模式(或插入模式、编辑模式)和指令模式(或命令模式)。输入模式下输入字符,文本就会显示在屏幕上;而指令模式下输入字符就解释为一个输入命令并执行,而不会显示相应的字符。理解指令模式最简单方式就是想象平时剪切、复制以及粘贴数据时所发生的情况。 使用[Esc]键可以停止当前操作(插入或者命令)重新回到指令模式,准备接受新的指令。如果本来就在指令模式下面,将会响铃一下。 【最基本的使用】 这里提供了使用vi得最基本的操作,能够实现大多数的编辑目的。如果你肯花几分钟把“最基本的使用”的内容都实践一下,那么你至少可以独立地在vim朝你想要得方向“前进”了。如果你不想学习,那么就把它当作一个“字典”吧。 *用vi打开一个文件: 输入“vi filename”. 这里,filename就是你要打开的文件的名字,默认打开文件后vi处于指令模式。 *进入编辑模式编辑打开的文件: 输入“i”. 或输入“a”. 进入编辑模式后,你可以直接敲入想要输入的字符到文件,两者的区别是i在当前字符前面开始插入,a在当前字符后面开始插入。 *退出编辑模式: 输入“[Esc]”. 这样,将返回指令模式,准备接收你要传达给vi的指令并执行,如果之前已经在指令模式下,那么系统将响铃提醒一下。 **以下命令都是在命令模式下进行: *撤销修改: 输入“u”. 这里,相比以前的vi来说,vim支持多步撤销。 *恢复修改: 输入“[Ctrl]r”. 这里,和撤销命令相反,是撤销的撤销,也可多步。 *复制行到剪切板: 输入“yy”. *复制选定内容到剪切板: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“y”。 这里,开始输入v使vi临时进入了一个"选择模式",输入方向键可以选择,输入y将选择的内容复制剪切板。 *删除行: 输入“dd”. 注意,vi的删除等价于剪切,删除的内容会保存到剪切板。 *删除选定内容: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“d”。 这里,开始输入v使vi临时进入了一个“选择模式”,输入方向键可以选择,输入d将选择的内容删除。 *粘贴: 输入“p”. 这样会将剪切板的内容粘贴到光标位置或者光标下一行。 *查找字符并定位到第一个匹配处: 输入“/character”. 这里character是待查找的字符,只要先输入/,再输入待查字符,最后回车即可定位到第一个匹配的字符处。 *定位到匹配查找的下一个字符处: 输入“n”. *定位到匹配查找的上一个字符处: 输入“N”. *保存文件: 输入“:w”. 注意w前面的':',输入':'之后,vim会将':'之后的输入解释为待执行的指令。 *退出: 输入“:q”. 这里,如果文件没有保存,将提示无法退出,除非你强制退出,不保存文件,或者保存退出。 *强制退出: 输入“:q!”. *保存退出: 输入“:wq”. 或输入“ZZ”. *察看帮助 输入":help". ** 另外还有一个简易的教程: 输入命令:vimtutor.

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧