vim 工具使用

1 gg 文件的首行, G 文件的尾行

2  vim的自动补全功能
一般使用Ctrl+n就能自动补全了,从Vim7后,C/C++的函数、变量或是类的成员,使用Ctrl+x,Ctrl+o也能自动补全。
如果不全的可能项有多个,可多次按ctrl + n 选择你想要的不全项。

3 split(水平分栏)  vsplit(垂直分栏)
  #split . 将当前目录(这里的当前目录不是pwd的结果,就是当前vim中打开的目录)
  #split   这样是将当前目录(当前目录是pwd的结果)或是当前打开的文件分栏

4 ctrl + w 从一栏跳到另外一栏

5 e 后面接目录参数,退出到该指定目录
  e + 目录(这里是目录哦,不能是文件,e + 文件 是没有什么作用的) 表示退出到指定目录
  e . 退出到当前目录,这里的当前目录.即pwd的结果。如果要退到指定目录可用: e  指定目录,如:e ./src/scxsystemlib  ---退到scxsystemlib目录

6 nyy 复制n行 yy复制一行   p 粘贴.y 复制高亮选中的文本到剪切板.

7 ndd  删除n行   dd 删除一行.db删除某个单词.

1.复制粘贴的基本命令:

yy复制游标所在行整行。或大写一个Y。

2. yy或y2y复制两行。
y^复制至行首,或y0。不含游标所在处字元。
y$复制至行尾。含游标所在处字元。
yw复制一个word。
y2w复制两个字(单词)。
yG复制至档尾。
y1G复制至档首。
p小写p代表贴至游标后(下)。
P大写P代表贴至游标前(上)。


8 默认情况下SSH Secure Shell Client不支持vim语法高亮,解决办法:

  1. SSH Secure Shell Client上选择 Enable ANSI colors选项

  2. 在/etc/profile里加上export TERM=dtterm

  3. 在当前用户HOME目录生成.exrc文件,在文件中加入syntax enable命令,并保存。
  这样当前用户在任意目录打开vim命令就会有语法高亮了,哈哈。
 

9 0 光标到行首,$光标到行尾

10 w 下个单词,b前面一个单词

11 /查找时,n下个,shift+n 向相反方向查找同上一次的字符

12 f(ile),显示当前文件名

13 cd 指定当前路径,默认pwd得到的是 vim . 打开时的文件路径


14
在当前用户HOME目录生成.exrc文件 中加入如下命令:


set tabstop=4      ----设置制表符宽度
set softtabstop=4  ----设置软制表符宽度
set shiftwidth=4   ----设置缩进的空格数为4
set autoindent     ----设置自动缩进:开启新行时,新行的上一行缩进空格为多少,则新航缩进距离也为多少。使用 noautoindent 取消设置
set cindent        ----设置使用 C/C++ 语言的自动缩进方式
set expandtab      ----将所有的tab替换为tabstop指定数目的空格  (命令可简写为 set et)


15
如果设置了set cindent,打开c/c++风格的自动缩进后,在编码的时候可以选中一段代码,按"="将这段代码按照c/c++风格重新调整缩进,美化代码。但是,打开了自动缩进后, 在使用 TERM 下的 vim 的时, 粘贴代码时常常会出现版式混乱的现象。那是因为 TERM 并不知道现在正在粘贴代码, 它直接“粘贴”动作向 vim解释为键入, 因此 vim 便按照设置的自动缩进格式为的代码调整了缩进。
不幸的是, 粘贴进去的代码中本身已经包含了缩进, 因此便出现了版式混乱的情况。
在 gvim 中就不会出现这个问题, 因为它能够知道现在正在粘贴。
知道了这个症状的来由, 解决方案也就显而易见了: 在粘贴的时候把所有自动缩进都关闭,
粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐, vim 为提供了一个很好用的命令,只要输入“:set paste”, 就可以关闭所有自动缩进。 粘贴完毕后再输入“:set nopaste"就可以重新打开原有的自动缩进设置了。
-----实际使用情况是,不用set cindent 也可以用=号来自动排版,很奇怪?

16 set number(set nu);set nonumber(set nonu)

17 排版代码
   可以用 "v" 高亮选中一段代码,然后再用"="号自动排版。
   如果是正个文件,可以用gg=G来排版,或是gg v G =来排版,效果一样.

18 在可视化选择模式进行剪切、复制和粘贴
  ctrl+v 只能选中一个矩形的代码,矩形的大小是根据矩形范围内最后一行的宽度来决定的;
  小写的v,是根据手工选中的范围高亮,可以选中一行的部分;
  大写的V,是整行选中。
  在可视化选中模式下进行剪切和复制
  一旦你有了高亮选择, 你可能想要干点啥. 以下是对选中的高亮文本最有用的命令:
  d 剪切(删除)高亮选中的文本到剪切板. (译注: 据本人所知, vim所有的删除其实都是剪切)
  y 复制 (或者说"拽"(yank), vim用"拽"来表示复制...)高亮选中的文本到剪切板.
  c 剪切高亮选中的文本到剪切板. 和d很相似, 只是c会进入插入模式.
 
  shift+v 可视化行
  ctrl+v 可视化块

19 匹配括号
  % 把光标放在某个花括号{}, 中括号[]或者圆括号()上, 按%会把光标移动到与之对应的花括号, 中括号或者圆括号上. 对于修正多层嵌套逻辑代码块的括号解析问题来说, 这个功能堪称救人于水火之中.

20 超级移动(motion)
fx
在当前行向前移动光标到下一个字符x (很明显, x可以是任意你想要移动到的字符). 这是一个超级有用的命令. 你可以输入;来重复前一个f命令.
tx
和上面的命令基本相同, 除了移动光标到字符x之前而不是x字符本身,唯一区别就是每次匹配到x之前的字符后再找下一个匹配时,你必须把光标移动到这个匹配字符的后面,不然老是找到当前的这个匹配字符不往下一个找(有点傻)。 (这个真的很有用)
Fx
在当前行向后移动光标到上一个字符x.

21 当前页的移动
<C-F> 将光标向前(下)移动一页(屏幕).
<C-B> 将光标向后(上)移动一页.
G 移动到文件尾
numG 将光标移动到某一行. (例如, 10G是把光标移动到第10行.)
gg 将光标移动到文件开头
H 将光标移动到当前页的第一行.
M 将光标移动到当前页的中间一行.
L 将光标移动到当前页的最后一行. (译注: 有了H,M,L 这3个命令, 可以把鼠标撇了, 爽)

22 字符串的移动
* 读取光标下的字串, 然后移动到当前文件中下一次出现该字串的位置. (比如说如果你的光标所在的位置的字串为"bob,", 按了*之后, 光标将移动文件中下一个"bob"出现的位置.)
# 和*命令作用相同, 只不过方向与*刚好相反,是移动到该字符串上一次出现的位置.

* 或 #用来向后或向前查找当前光标所在单词

22.1 v i w三个字母组合键为选中当前光标所在的单词

23 标签的使用
ma 给当前光标所在位置设置一个名字为a的书签. 书签的名字可以是任何小写字母. 你看不到书签, 但它确实在.
`a 移动光标到书签a. 注意`不是单引号, 大部分键盘上它在数字1的左面. (译注: 本人使用的vim 7.1 windows版本用单引号也能完成同样功能)
`. 移动到你之前最后一次编辑过的行. 这个又是"真有用". 如果你需要在文件中"滚来滚去"查看一些东西, 你可以用这个命令回到你之前编辑的行尽管你没把它设成书

24 在非可视化选择模式进行剪切、复制和粘贴
如果你确知你想要复制或者剪切什么, 你可以不进入可视化选择模式就完成这些操作. 这样速度更快.
d{motion} 把由motion"掠过"的文本剪切到剪切板. 比如dw把当前光标开始的一个词剪切到剪切板, 而dfS把从当前行从光标是到下一个S之间的文本剪切到剪切板.
y{motion} 把motion"掠过"的文本复制到剪切板.
c{motion} 把motion"掠过"的文本剪切到剪切板并且进入插入模式.
dd 剪切当前行到剪切板.
yy 复制当前行到剪切板.
cc 剪切当前行到剪切板并且进入插入模式.
D 剪切光标当前位置到行尾的文本到剪切板.
Y 复制整行到剪切板, 和yy相似. (yes, 这个命令和命令D的操作方式没保持一致, 你可以用y$完成类似D的操作)
C 剪切光标当前位置到行尾的文本到剪切板并进入插入模式.
x 剪切当前字符. (类似于命令模式的退格(backspace)键)
s 剪切当前字符并进入插入模式.
粘贴
粘贴很简单. 把光标移动到你想要粘贴的位置输入p. (译注: 粘贴操作需要在命令模式下, 另外P(大写)命令把剪切板的内容粘贴到光标当前位置之前, 对用惯其它编辑器的人来说, P命令可能更符合习惯)

 

25 vim 的挂起和返回
ctrl-z 退出vim返回到shell,然后在unix中敲入命令fg回车又可以回到之前中断的vim session.
fg:foreground
bg:background

26 lcd 更改当前窗口的当前目录,即pwd的值
   如:
   lcd ~/cmCode/Unix/Shared/XPlatCommon/src  ---将当前窗口进入的目录~/cmCode/Unix/Shared/XPlatCommon/src设置为此窗口的pwd目录.
   这样一来用e .命令时就会退出到~/cmCode/Unix/Shared/XPlatCommon/src这个目录,很有用的方法哦^_^
   lcd 与 e . 结合起来使用。用分割窗口时,lcd只是修改了当前窗口的当前目录,别的分割窗口时没影响的。
   ~/cmCode/Unix/Shared/XPlatCommon/src这个path可以通过命令file来查看。
 
27 滚屏命令
CTRL+U 将屏幕向前(文件头方向)翻滚半屏;提示:u表示 up;
CTRL+D 将屏幕向后(文件尾方向)翻滚半屏。提示:d表示 down;
可以在这两个命令之前加上一个数字n,则屏幕向前或向后翻滚n行。并且这个值被系统记住,以后再用CTRL+U 和CTRL+D 命令滚屏时,还滚相应的行数。
CTRL+F 将屏幕向文件尾方向翻滚一整屏(即一页);提示:f表示 forward;
CTRL+B 将屏幕向文件首方向翻滚一整屏(即一页)。提示:b表示 backward;
同样也可以在这两个命令之前加上一个数字n,则屏幕向前或向后移动n页;
CTRL+E 将屏幕向上滚动一行;
CTRL+Y 将屏幕向下滚动一行。

28 移动到行首或行尾
“$”命令把光标移动到当前行行尾。如果你的键盘上有<End>键,也可以完成相同的功能。
“^”命令把光标移动到当前行的第一个非空字符,
“0”命令则移到一行的第一个位置, <Home>键也可以完成相同的功能。
“$”命令接受个数前缀。1$表示:移动到当前行的行尾;2$表示:移动到下一行的行尾;如此类推。
"0”和“^”不接受个数前缀。

29 移动到特定的行
“G” 命令把光标移动到文末;
“gg”命令把光标移动到文首;
“nG”命令把光标移动到第n行的第一个空白字符上,可用“:set number<Enter>”来显示行号,用“:set nonumber<Enter>”来关闭显示;
“n%" 命令以百分数来移动光标;
“H” 命令把光标移动到屏幕的第一行;
“M” 命令把光标移动到屏幕的中间行;
“L” 命令把光标移动到屏幕的最后一行;
提示:“H”表示“Home”,“M”表示“Middle”而“L”表示“Last”。

30 在代码间移动
“[]” 向上跳转到一个函数的结尾,“][”向下移动到一个函数的结尾;
“[[” 向上跳转到函数的开始,“]]”向下跳到结尾处;
注意:这四个命令要求“{”“}”符号在第一列;
“[{” 跳转到当前代码块{}的开始处,“[}”跳转到当前代码块{}的结尾处;
“]{”“]}”“[(”“[)”“](”“])”“[/”“]/”也有类似功能,只是匹配的是“()”“/*”

“[I” 命令查找光标下的标识符,不仅在当前文件内查找,还会在所有的包含文件中查找;
“[<Tab>” 跳到第一项,<Tab> 可以是<CTRL+I>;
“n[<Tab>” 跳到第n项;
“]I” 只列出光标下面的项目

“[D” 只查找 "#define" 定义的宏,
“]D” 只列出光标下面的项目
“gD” 只在当前文件中查找,并跳转到被首次使用的地方;
“gd” 只在当前函数内查找,注意,函数的开始符号“{”要求在第一列;

31 输入 d$ 从当前光标删除到行末。**  

32  第二讲第三节∶关于命令和对象  
 
 
  删除命令 d 的格式如下∶  
 
     [number]   d   object      或者     d     [number]   object  
 
  其意如下∶  
    number - 代表执行命令的次数(可选项,缺省设置为 1 )。  
   d - 代表删除。  
    object - 代表命令所要操作的对象(下面有相关介绍)。  
 
  一个简短的对象列表∶  
   w - 从当前光标当前位置直到单字/单词末尾,包括空格。  
    e - 从当前光标当前位置直到单字/单词末尾,但是 *不* 包括空格。  
    $ - 从当前光标当前位置直到当前行末。  
 
特别提示∶  
    对于勇于探索者,请在正常模式下面仅按代表相应对象的键而不使用命令,则  
    将看到光标的移动正如上面的对象列表所代表的一样。  
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
        第二讲第四节∶对象命令的特殊情况  
 
 
           ** 输入 dd 可以删除整一个当前行。 **  
 
  鉴于整行删除的高频度,VIM 的设计者决定要简化整行删除,仅需要在同一行上  
  击打两次 d 就可以删除掉光标所在的整行了。  
 
  1. 请将光标移动到本节中下面的短句段落中的第二行。  
  2. 输入 dd 删除该行。  
  3. 然后移动到第四行。  
  4. 接着输入 2dd (还记得前面讲过的 number-command-object 吗?) 删除两行。  
 
      1)  Roses are red,  
      2)  Mud is fun,  
      3)  Violets are blue,  
      4)  I have a car,  
      5)  Clocks tell time,  
      6)  Sugar is sweet  
      7)  And so are you.  
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
            第二讲第五节∶撤消类命令  
 
 
     ** 输入 u 来撤消最后执行的命令,输入 U 来修正整行。**  
 
  1. 请将光标移动到本节中下面标记有 ---> 的那一行,并将其置于第一个错误  
     处。  
  2. 输入 x 删除第一个不想保留的字母。  
  3. 然后输入 u 撤消最后执行的(一次)命令。  
  4. 这次要使用 x 修正本行的所有错误。  
  5. 现在输入一个大写的 U ,恢复到该行的原始状态。  
  6. 接着多次输入 u 以撤消 U 以及更前的命令。  
  7. 然后多次输入 CTRL-R (先按下 CTRL 键不放开,接着输入 R 键) ,这样就  
     可以执行恢复命令,也就是撤消掉撤消命令。  
 
---> Fiix the errors oon thhis line and reeplace them witth undo.  
 
 这些都是非常有用的命令。下面是第二讲的小结了。  
 
.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

 

在 VIM 内执行外部命令的方法  
  
** 输入 :! 然后紧随著输入一个外部命令可以执行该外部命令。**  
1. 按下我们所熟悉的 : 命令设置光标到屏幕底部。这样就可以让您输入命令了。  
2. 接着输入感叹号 ! 这个字符,这样就允许您执行外部的 shell 命令了。  
3. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的  
     内容,就如同您在命令行提示符下输入 ls 命令的结果一样。如果 !ls 没起  
     作用,您可以试试 :!dir 看看。  
 

 

 

 

 

1 合并行
  shift + J ----将当前行的下一行append到当前行的尾部

2  一列的删除和插入
 删除列 1.光标定位到要操作的地方. 2.CTRL v 进入“可视 块”模式,选取这一列操作多少行. 3.d 删除.
插入列 插入操作的话知识稍有区别.例如我们在每一行前都插入"() ": 1.光标定位到要操作的地方. 2.CTRL v 进入“可视 块”模式,选取这一列操作多少行. 3.SHIFT i(I) 输入要插入的内容. 4.ESC 按两次,会在每行的选定的区域出现插入的内容. 这样以后就方便多了.

 

 

 

Vim 代码折叠使用大全
写C,(C++)CPP代码时,自动折叠能带来很多好处,强大的Vim提供了快捷方式。如下:


1. 折叠方式
可用选项 'foldmethod' 来设定折叠方式:set fdm=*****。
有 6 种方法来选定折叠:
          manual           手工定义折叠
indent             更多的缩进表示更高级别的折叠
expr                用表达式来定义折叠
syntax             用语法高亮来定义折叠
diff                  对没有更改的文本进行折叠
marker            对文中的标志折叠
注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。

使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。

2. 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zc      折叠
zC     对所在范围内所有嵌套的折叠点进行折叠
zo      展开折叠
zO     对所在范围内所有嵌套的折叠点展开
[z       到当前打开的折叠的开始处。
]z       到当前打开的折叠的末尾处。
zj       向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk      向上移动到前一折叠的结束处。关闭的折叠也被计入。

当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动之:)
我们可以使用下面的命令来创建和删除折叠:
zf      创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd      删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zD     循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zE     除去 (Eliminate) 窗口里“所有”的折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。

 

VIM中常用的替换模式总结:

1,简单替换表达式  

:%s/four/4/g

“%”范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可

用 “\<” 来指定匹配单词开头:

      :%s/\<four/4/g

显然,这样在处理 “fourty”的时候还是会出错。用 “\>” 来解决这个问题:

      :%s/\<four\>/4/g

如果你在编码,你可能只想替换注释中的“four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个“c” 标记,这样,Vim会在每次替换前提示你:

      :%s/\<four\>/4/gc

2,删除多余的空格

要删除这些每行后面多余的空格,可以执行如下命令:

      :%s/\s\+$//

“\s\+$”表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的“to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值