vim 使用入门

VIM入门

1. 光標在屏幕文本中的移動既可以用箭頭鍵,也可以使用 hjkl 字母鍵。
     h (左移)    j (下行)       k (上行)        l (右移)
  2. 欲進入vim編輯器(從命令行提示符),請輸入︰vim 文件名 <回車>
  3. 欲退出vim編輯器,請輸入以下命令放棄所有修改︰
    <ESC>   :q!     <回車>
     或者輸入以下命令保存所有修改︰
    <ESC>   :wq     <回車>
  4. 在正常模式下刪除光標所在位置的字符,請按︰ x
  5. 在正常模式下要在光標所在位置開始插入文本,請按︰i   輸入必要文本    <ESC>
特別提示︰按下 <ESC> 鍵會帶您回到正常模式或者取消一個不期望或者部分完成
的命令。
*********************************************************************
  1. 欲從當前光標刪除至單字/單詞末尾,請輸入︰dw
  2. 欲從當前光標刪除至當前行末尾,請輸入︰d$
  3. 欲刪除整行,請輸入︰dd
  4. 在正常模式下一個命令的格式是︰
       [number]   command   object     或者     command    [number]   object
     其意是︰
       number - 代表的是命令執行的次數
       command - 代表要做的事情,比如 d 代表刪除
       object - 代表要操作的對象,比如 w 代表單字/單詞,$ 代表到行末等等。
        $ (to the end of line), etc.
  5. 欲撤消以前的操作,請輸入︰u (小寫的u)
     欲撤消在一行中所做的改動,請輸入︰U (大寫的U)
     欲撤消以前的撤消命令,恢復以前的操作結果,請輸入︰CTRL-R
*********************************************************************
  1. 要重新置入已經刪除的文本內容,請輸入小寫字母 p。該操作可以將已刪除
     的文本內容置于光標之後。如果最後一次刪除的是一個整行,那麼該行將置
     于當前光標所在行的下一行。
  2. 要替換光標所在位置的字符,請輸入小寫的 r 和要替換掉原位置字符的新字
     符即可。
  3. 更改類命令允許您改變指定的對象,從當前光標所在位置直到對象的末尾。
     比如輸入 cw 可以替換當前光標到單詞的末尾的內容;輸入 c$ 可以替換當
     前光標到行末的內容。
  4. 更改類命令的格式是︰
     [number]   c    object          或者    c   [number]   object
*********************************************************************
  1. Ctrl-g 用于顯示當前光標所在位置和文件狀態信息。Shift-G 用于將光標跳
     轉至文件最後一行。先敲入一個行號然後按 Shift-G 則是將光標移動至該行
     號代表的行。
  2. 輸入 / 然後緊隨一個字符串是則是在當前所編輯的文檔中向後查找該字符串。
     輸入問號 ? 然後緊隨一個字符串是則是在當前所編輯的文檔中向前查找該字
     符串。完成一次查找之後按 n 鍵則是重復上一次的命令,可在同一方向上查
     找下一個字符串所在;或者按 Shift-N 向相反方向查找下該字符串所在。
  3. 如果光標當前位置是括號(、)、[、]、{、},按 % 可以將光標移動到配對的
     括號上。
  4. 在一行內替換頭一個字符串 old 為新的字符串 new,請輸入  :s/old/new
     在一行內替換所有的字符串 old 為新的字符串 new,請輸入  :s/old/new/g
     在兩行內替換所有的字符串 old 為新的字符串 new,請輸入  :#,#s/old/new/g
     在文件內替換所有的字符串 old 為新的字符串 new,請輸入  :%s/old/new/g
     進行全文替換時詢問用戶確認每個替換需添加 c 選項,請輸入 :%s/old/new/gc
*********************************************************************
  1. :!command 用于執行一個外部命令 command。
     請看一些實際例子︰
     :!dir        -  用于顯示當前目錄的內容。
     :!rm FILENAME    -  用于刪除名為 FILENAME 的文件。
  2. :w FILENAME  可將當前 VIM 中正在編輯的文件保存到名為 FILENAME
     的文件中。
  3. :#,#w FILENAME 可將當前編輯文件第 # 行至第 # 行的內容保存到文件
     FILENAME 中。
  4. :r FILENAME 可提取磁盤文件 FILENAME 並將其插入到當前文件的光標位置
     後面。
**********************************************************************
  1. 輸入小寫的 o 可以在光標下方打開新的一行並將光標置于新開的行首,進入
     插入模式。
     輸入大寫的 O 可以在光標上方打開新的一行並將光標置于新開的行首,進入
     插入模式。
  2. 輸入小寫的 a 可以在光標所在位置之後插入文本。
     輸入大寫的 A 可以在光標所在行的行末之後插入文本。
  3. 輸入大寫的 R 將進入替換模式,直至按 <ESC> 鍵退出替換模式而進入正常
     模式。
  4. 輸入 :set xxx 可以設置 xxx 選項。
**********************************************************************
  Vim 擁有一個細致全面的在線幫助系統。要啟動該幫助系統,請選擇如下三種方
  法之一︰
    - 按下 <HELP> 鍵 (如果鍵盤上有的話)
    - 按下 <F1> 鍵 (如果鍵盤上有的話)
    - 輸入    :help <回車>
  輸入 :q <回車> 可以關閉幫助窗口。
  提供一個正確的參數給":help"命令,您可以找到關于該主題的幫助。請試驗以
  下參數(可別忘了按回車鍵哦。:)︰

      :help w <回車>
      :help c_<T <回車>
      :help insert-index <回車>
      :help user-manual <回車>
     
     
     
     
     
     
     
     
     
     
     
     
     
      vim常用快捷操作
1,*:该命令可以查找光标所在位置的单词;

2,%: 命令可以从一个打开的括号跳转到与它成对匹配的另一个括号处,还可以从一个预处理指令"#if"跳转到与之匹对的"#endif"

3,[{:使光标从区间中的任意位置移到区间的头部。如在{}区间中执行命令“[{“可使光标移到“{”处。

4,gd:在某个被使用的变量处输入“gd”命令可使光标移到该变量的声明处。

5,局部替换:用*命令找到想要替换的单词,cw命令替换这个单词。用n找到下一个单词并用.就可以替重复上面的替换动作了。不光对替换,这些命令对删除、插入也适用。

6,如果我们反复用到了glTranslatef()这个函数,当第二次输入glT时再敲Ctrl-N就可以自动补全到glTranslatef了,如果出来的是glLoadIdentity,而不是我们想要的glTranslatef,这时再敲命令Ctrl-N,直到补全的是我们想要的 glTranslatef。

7,宏:vim可以自行记录一个宏。你键入"qa"开始把一段宏记录入寄存器变量‘a’中。接下来像平常一样键入要的操作, 只是这些操作都会被Vim记录进它命名为‘a’的宏中, 再次再下"q"键, 就结束了‘a’的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有26个可用的寄存器供你记录宏。不只是插入,其他的操作也可以使用宏。

8,如果我们在输入include时总是将它输成inclued,可用下面的方法解决。
       :abbr inclued include 以后凡是输入inclued的时候系统会自动将其改为include.
      如果我们反复用到一些字符,可将它编为缩写。
      :abbr inc #include() 以后凡是输入inc时系统会自动输入#include“”
    :abbr MS Mandrake Software 用MS代替后面的Mandrake Software

9,标签:
    介绍本节内容之前我们先介绍一下什么是标签(tags)。tag是一个位置,记录了关于一个标识符在哪里被定义的信息。如C程序中一个函数的定义。这种 tag聚集在一起被放入一个tags文件。这个文件可以让vim从任何位置跳到tag所指定的位置(标识符定义的位置)。
    下面的命令可以为当前目录下的所有C程序文件生成对应的tags文件:
    ctags *.c
     现在用如下的命令就可以在vim中跳到一个函数的定义处:
    :tag realize 或 Ctrl-]
    这样光标就跳到了函数realize的定义处,哪怕它是在另一个文件中。
    现在用下面的命令就可以跳回到上一个标签处:
    Ctrl-T
10,头文件
    [I:在头文件处使用“[I“命令可以定位头文件的位置,如在“#include<stdio.h>处使用“[I”命令可以显示该头文件的位置。
    :checkpath:显示所有用到的头文件及他们的路径。
11,简易快捷操作:

    * G:将光标移动到文件尾部
    * gg:移动到文件首部
    * M:移动到屏幕中间
    * L:移动到屏幕底部
    * H:移动到屏幕首部
    * *:读取光标处的字符串,并移动到它再次出现的位置
    * #:与上面的相反,移动到它上次出现的位置
    * ma:在当前位置标记一个书签,书签只能是小写字母。你看不见它的存在,但它已经存在到那里了。
    * `a:移动到标签 a 处。
    * `.:移动到上一次编辑文件的地方。这个功能很有用,而且不需要标记它。

12,高效的输入:

    * a:在当前字符的右边输入
    * i:在当前字符的左边输入
    * o:在当前行的下一行输入
    * O:在当前行的上一行输入
    * 10dd :将会删除下面的十行。

13,用 VIM 写代码:

    * >:缩进所选择的内容
    * <:和上面的命令一样,只是反缩进
   
  
   
    VIM下的跳转练习
   
    hjkl 这是代替箭头键功能的
H M L 跳到屏幕的顶上 中间 下方

w 跳到下一个单词的开始
e 跳到单词的结束
b 向后跳

gg 跳到文件的开始
G 跳到文件的结束
10gg 或10G 跳到第10行


ta 跳到下一个a 前面
fa 跳到下一个a
大写的意思相反



另外还有%(跳到文件的%多少) 和|(跳到第几列) 不过我很少用


上面的都可以加上数字前缀 表示第几个匹配


另外看文件时 除了pageup pagedown外还有其它的快速键
如CTRL-F 向前一页 CTRL-B 向后一页

上面不是重要的
CTRL-D 向下半页 CTRL-U 向上半页我觉得更实用 这样看文章时就不会跳转出错
另外还有
CTRL-E 向下一行
CTRL-Y 向上一行


^ 行首
$行尾
0 第一个字符


另外上面也作为vim其它命令的定位符 如删除d

dt)
一直删除到这行的)

另外 懂了跳转键后 那删除或是复制时就不再是以行为单位了 可以指定到某个条件
我觉得这是新手成长的必要方法


另外还有ctrl-t ctrl-i ctrl-]

如果已经使用了ctags 或是cscope创建索引文件的话 那看代码时很是方便

跳转到函数、变量定义处:
[+ctrl+i 跳转到函数、变量和#define
[+ctrl+d 跳转到#define处
ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置

函数体跳转:
[[
]]
[]
][
{}

2009-07-07 17:31 补充

如何选中括号中的内容 进行:
将光标移至括号内,按shift+v进入行选模式,然后

i{ - 选小括号中内容,不包括小括号
a{ - 选小括号中内容,包括小括号
ib - 选中括号中内容,不包括括号
ab - 选中括号中内容,包括括号
i{ - 选大括号中内容,不包括大括号
a{ - 选大括号中内容,包括大括号

:h text-objects

下面还有些相关的tips,未全部验证:
vi{ 选中{}中间的内容,不包括{}
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落

在normal模式下光标停在某个字符上ga可以查看该字符的ascii码
#复制删除粘贴的操作:按V(shift+v),进入可视模式,jk上下选择需要的行,然后按
y 复制
d 删除
x 剪切
p 粘贴
可视模式很好用,例如想把两行的所有单词变成小写,按V然后按j或k选中这两行,按gu即可
#跳到行首按0,但实际更好用的是^, 跳到行首非空白字符
#折行前空出4字符显示折行标识
set foldcolumn=4
#折叠或展开(在折叠的那一行左右移动光标也可展开折叠)
za
#删除光标所在行所处的范围的折叠
zd
#当在:set foldmethod=marker后,折行会把{{{和}}}之间的内容折叠
#不在单词中间断行。 设置了这个选项后, 如果一行文字非常长, 无法在一行内显示完的话,
它会在单词与单词间的空白处断开, 尽量不会把一个单词分成两截放在两个不同的行里。
set lbr
#sw是shiftwidth的缩写,表缩进列数
fx把光标移动到该行的下个x字符上,这个x也可以是一个汉字,;重复fx操作。Fx把光标移动到该行的上一个x字符上。
gg光标定位到第一行开头,G定位到最后一行开头
H光标跳到当前窗口显示文本的第一行
M光标跳到当前窗口显示文本的中间一行
L光标跳到当前窗口显示文本的最后一行
g*查找包含当前单词的所有单词(*只查找与当前单词精确匹配的单词),
-d光标下跳半屏,文本上滚半屏
-u光标上跳半屏,文本下滚半屏
-e文本向上滚动一行
zz屏幕滚动使得当前行成为屏幕的中间一行
normal模式下按J删除此行末尾的换行符,从而合并两行
:e!重新读进上次保存的此文件内容
:ab myname william_djj
以后再编辑时键入myname,然后空格或回车myname串就会被william_djj代替
:r !date
在当前位置插入系统时间(linux下的date命令),同理当前位置插入某文件的内容就是
:r filename
:set ignorecase
查找时取消case sensitive
:set noignorecase
查找时case sensitive






############ 使用tags ###################
以下命令递归当前目录下的所有文件创建tags文件
ctags -R .
vim打开当前目录下的任意一文件,命令模式下键入下面语句以指定刚才创建的tags的位置,以后就可以在不同文件间查阅函数
set tags=../tags
#分割窗口显示当前函数的定义
-w ]
##########################################
如果插件目录下有echofunc.vim,用以下命令生成tags,以后编辑代码函数名后打“(“时有参数提示。
$ ctags -R –fields=+lS .
:Tlist打开左边一个taglist的窗口,显示symbols。要注意的是在windows下如果tags文件路径中有空格或中文会报找不到tags文件的错误,
+w+w 或者+w+left/right 窗口切换
+] 进入光标所指的symbol的定义(如果用鼠标也是+鼠标左键,跟SI的用法一样)
+t 返回第一个用+t 跳转位置,注意+o是跳回上一个视图,而+t是跳回上一次按+]的位置
#以下命令分裂出一个窗口显示定义处
ptag 函数名
#以下命令关闭刚才打开的分裂窗口
pclose

#垂直分裂窗口打开一文件
vsplit 文件名

#水平分裂窗口打开一文件
split 文件名
变量名写成/name表示匹配模式
停在某个括号上按%,跳到匹配的括号处,#if跳到匹配的#else或#endif处
set fdm=syntax折叠函数体
双击]往后逐个函数跳读,双击[往前逐个函数跳读

#解决乱码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

#在vim下对比两个文件,原来打开了fnpro.c,现在和fnpro.c.bak对比

#垂直分割
:vert diffsplit fnpro.c.bak

#水平分割
:diffsplit fnpro.c.bak

#跳到下一个不同之处
:]c

#跳到上一个不同之处
:[c

#展开折叠:zo

#折叠:zc

#不论何种情况下-o都可以上一次跳转的地方

#查看变量和函数的申明
[i

#以下为查看vim环境参数makeprg的值的例子:
:set makeprg?

#重新对文件代码进行缩进
gg=G

跳转到函数、变量定义处:
[+ctrl+i 跳转到函数、变量和#define
[+ctrl+d 跳转到#define处
ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置

函数体跳转:
[[
]]
[]
][
{}

2009-07-07 17:31 补充

如何选中括号中的内容 进行:
将光标移至括号内,按shift+v进入行选模式,然后

i{ - 选小括号中内容,不包括小括号
a{ - 选小括号中内容,包括小括号
ib - 选中括号中内容,不包括括号
ab - 选中括号中内容,包括括号
i{ - 选大括号中内容,不包括大括号
a{ - 选大括号中内容,包括大括号

:h text-objects

下面还有些相关的tips,未全部验证:
vi{ 选中{}中间的内容,不包括{}
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落

vim文件跳转

如果使用vim打开了多个文件,如vim file1 file2 ... fileN
可以通过
:n 或 :prev来跳转到前一个或者后一个文件
还可以通过
:first或:last来跳转到第一个和最后一个文件

如果你只打开一个文件,如vim file1
然后在使用过程中,通过
:e file2编辑了第二个文件,这时, :prev是不起作用的
可以用
:e#返回上一个编辑的文件

无论哪两种方式都可以用
:bN跳转到打开的第N个文件
如:b1跳转到第一个打开的文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值