vim命令、快捷键

前端之家收集整理的这篇文章主要介绍了vim命令、快捷键前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

http://blog.csdn.net/pipisorry/article/details/23515091

@H_301_4@vi /vim介绍

可以将 vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来显示一些特殊的信息。 可以说vim 是个“程序编辑器”!甚至一些 Linux 基础配置文件内的语法,都能够用 vim 来检查! 简单的来说, vi 是老式的文书处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具,就连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个“程序开发工具”而不是文书处理软件~^_^。 因为 vim 里面加入了很多额外的功能,例如支持正则表达式的搜寻架构、多文件编辑、区块复制等等。

@H_301_4@目前大部分的 distributions 都以 vim 取代 vi 的功能了!如果你使用 vi 后,却看到画面的右下角有显示目前光标所在的行列号码,那么你的 vi 已经被 vim 所取代啰

vim的这些优势主要体现在以下几个方面

1、多级撤消
我们知道在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性
vi只能运行于unix中,而vim不仅可以运行于unix,windows,mac等多操作平台。
3、语法加亮
vim可以用不同的颜色来加亮你的代码
4、可视化操作
就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
5、对vi的完全兼容
某些情况下,你可以把vim当成vi来使用。

皮皮Blog



@H_301_4@vi/vim命令及按键说明

进入vi的命令

vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑


一般模式可用的按钮说明

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等

移动光标的方法
h 或 向左方向键(←) 光标向左移动一个字符
j 或 向下方向键(↓) 光标向下移动一个字符
k 或 向上方向键(↑) 光标向上移动一个字符
l 或 向右方向键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。
如果想要进行多次移动的话,例如向下移动 30 列,可以使用 "30j" 或 "30↓" 的组合按键,
亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f] 屏幕“向下”移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕“向上”移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕“向下”移动半页
[Ctrl] + [u] 屏幕“向上”移动半页
+ 光标移动到非空白字符的下一列
- 光标移动到非空白字符的上一列
@H_301_4@n<space> 那个 n 表示“数字”,例如 20 。按下数字后再按空白键,光标会向右移动这一列的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字“ 0 ”:移动到这一列的最前面字符处 (常用)
$ 或功能键[End] 移动到这一列的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一列的第一个字符
M 光标移动到这个屏幕的中央那一列的第一个字符
L 光标移动到这个屏幕的最下方那一列的第一个字符
G 移动到这个文件的最后一列(常用) @H_301_4@ctrl+g显示当前行
nG n 为数字。移动到这个文件的第 n 列。例如 20G 则会移动到这个文件的第 20 列(可配合 :set nu) 等价于 :n
gg 移动到这个文件的第一列,相当于 1G 啊! (常用)
n<Enter> n 为数字。光标向下移动 n 列(常用)
搜寻与取代(vim中输入/word后可以按enter结束输入,再按大小写Nn进入上下搜索
/word 向光标之下寻找一个名称为 word 的字串。例如要在文件内搜寻 vbird 这个字串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字串名称为 word 的字串。
n 这个 n 是英文按键。代表“<u>重复前一个搜寻的动作</u>”。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字串,则按下 n 后,
会向下继续搜寻下一个名称为 vbird 的字串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字串!
N 这个 N 是英文按键。与 n 刚好相反,为“反向”进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示“向上”搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键字!
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 列之间寻找 word1 这个字串,并将该字串取代为 word2 !
举例来说,在 100 到 200 列之间搜寻 vbird 并取代为 VBIRD 则:“:100,200s/vbird/VBIRD/g”。(常用)
:1,s/word1/word2/g 第1行到当前行
:s/word1/word2/g 仅当前行
去掉g就是在当前行中只对第一个匹配替换
:1,$s/word1/word2/g 从第一列到最后一列寻找 word1 字串,并将该字串取代为 word2 !(常用)等价于@H_301_4@%s/word1/word2/g
:1,$s/word1/word2/gc 从第一列到最后一列寻找 word1 字串,并将该字串取代为 word2 !且在取代前显示提示字符给使用者确认 (confirm) 是否需要取代!(常用)

Note: 分割符可以使用:代替/,而如~等特殊字符要在前面加\转义。 %s:\~/.bashrc:$envfilename:g
删除、复制与贴上
x,X 在一列字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是倒退键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, “10x”。
dd 删除光标所在的那一整列,@H_301_4@其实是剪切命令,之后可以粘贴的(常用) @H_301_4@"*dd: 删除行并存入缓冲区*
ndd n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
d1G 删除光标所在到第一列的所有数据
dG 删除光标所在到最后一列的所有数据
d$ 删除光标所在处,到该列的最后一个字符
d0 那个是数字的 0 ,删除光标所在处,到该列的最前面一个字符
yy 复制光标所在的那一列(常用) 等价于Y
nyy n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
y1G 复制光标所在列到第一列的所有数据
yG 复制光标所在列到最后一列的所有数据
y0 复制光标所在的那个字符到该列行首的所有数据
y$ 复制光标所在的那个字符到该列行尾的所有数据
p,P p 为将已复制的数据在光标下一列贴上,P 则为贴在光标上一列! 如果是通过y$复制的,粘贴是在当前光标处,而不是下一行!
举例来说,我目前光标在第 20 列,且已经复制了 10 列数据。则按下 p 后, 那 10 列数据会贴在原本的 20 列之后,亦即由 21 列开始贴。
但如果是按下 P 呢? 那么原本的第 20 列会被推到变成 30 列。 (常用)
@H_301_4@"*p: 从缓冲区*粘贴; "+p 从剪切板+粘贴; 见后面解释
J 将光标所在列与下一列的数据结合成同一列
c 重复删除多个数据,例如向下删除 10 列,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点“.”就好了! (常用)

皮皮Blog

vi/vim三种模式及作用

  • 一般指令模式 (command mode)

以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中, 你可以使用“上下左右”按键来移动光标,你可以使用“删除字符”或“删除整列”来处理文件内容, 也可以使用“复制、贴上”来处理你的文件数据。

  • 编辑模式 (insert mode)

在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到你按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现“ INSERT 或 REPLACE ”的字样,此时才可以进行编辑。而如果要回到一般指令模式时, 则必须要按下“Esc”这个按键即可退出编辑模式。

  • 命令行命令模式 (command-line mode)

在一般模式当中,输入“ : / ? ”三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中, 可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等等的动作则是在此模式中达成的!

简单的说,我们可以将这三个模式想成下面的图示来表示:



Note:vim 的三种模式只有一般模式可以与编辑、指令列模式切换,编辑模式不指令列模式间并不能切换

第二部份:一般指令模式切换到编辑模式的可用的按钮说明

进入插入或取代的编辑模式
i,I 进入插入模式(Insert mode):i 为“从目前光标所在处插入”, I 为“在目前所在列的第一个非空白字符处开始插入”。 (常用)
a,A 进入插入模式(Insert mode):a 为“从目前光标所在的下一个字符处开始插入”, A 为“从光标所在列的最后一个字符处开始插入”。(常用)
o,O 进入插入模式(Insert mode):这是英文字母 o 的大小写。o 为“在目前光标所在的下一列处插入新的一列”;
O 为在目前光标所在处的上一列插入新的一列!(常用)
r,R 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现“--INSERT--”或“--REPLACE--”的字样。 由名称就知道该动作了吧!!
特别注意的是,我们上面也提过了,你想要在文件里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
[Esc] 退出编辑模式,回到一般指令模式中(常用)

第三部份:一般指令模式切换到命令行界面的可用按钮说明

命令行界面的储存、离开等指令
:w 将编辑的数据写入硬盘文件中(常用)
:w! 文件属性为“只读”时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件文件权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改文件,又不想储存,使用 ! 为强制离开不储存盘案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有“强制”的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个文件(类似另存新文件
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 “filename” 这个文件内容加到光标所在列后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件
:! command 暂时离开 vi 到命令行界面下执行 command 的显示结果!例如 “:! ls /home”即可在 vi 当中察看 /home 下面以 ls 输出文件信息!
vim 环境的变更
:set nu 显示行号,设置之后,会在每一列的字首显示该列的行号
:set nonu 与 set nu 相反,为取消行号!

vim中sudo保存无权限修改文件

使用 vim 对某个文件进行编辑,编辑完之后,按ESC之后回到普通模式,再按:wq准备保存退出时,发现没有权限对该文件进行修改,我们在使用 vim 命令时忘记在前面加 sudo 了。我就经常出现这种问题,之前的做法是只能不保存强退,再加上 sudo 重新编辑。

可以在 vim 的普通模式下,按:w !sudo tee %,这样就可以 root 权限来保存文件了。

其它快捷键

:r filename 来读入某个文件内容(整个文件内容)到vim当前打开的文件

Note:

1. 在 vi 中,“数字”是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。举例来说,要删除 50 列,则是用 “50dd” 对吧! 数字加在动作之前~那我要向下移动 20 列呢?那就是“20j”或者是“20↓”即可。

2. vim还有暂存档、救援回复与开启时的警告讯息功能

vim 常用指令示意图


vi/vim键盘


皮皮Blog

VIM中常用的替换模式总结

1,简单替换表达式
替换命令可以在全文中用一个单词替换另一个单词::%s/four/4/g
“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可
如果你有一个象“thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “\<” 来指定匹配单词开头:
:%s/\<four/4/g
显然,这样在处理“fourty” 的时候还是会出错。用“\>” 来解决这个问题:
:%s/\<four\>/4/g
如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:
:%s/\<four\>/4/gc
2,删除多余的空格
删除这些每行后面多余的空格,可以执行如下命令:
:%s/\s\+$//
命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是
“\s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。
3,匹配重复性模式
星号项 “*” 规定在它前面的项可以重复任意次。因此:/a*
匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “ ”,后面加“ ”。因此这个命令:/ ab *
匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。
要避免匹配空字串,使用“\+”。这表示前面一项可以被匹配一次或多次。/ab\+
匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。
要匹配一个可选项,用“\=”。 例如:/folders\=匹配 “folder” 和 “folders”。
4,指定重复次数
要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:/ab\{3,5}
匹配 “abbb”,”abbbb” 以及 “abbbbb”。
当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:
模式 匹配次数
\{,4} 0,1,2,3 或 4
\{3,} 3,4,5,等等
\{0,1} 0 或 1,同 \=
\{0,} 0 或 更多,同 *
\{1,} 1 或 更多,同 \+
\{3} 3
5,多选一匹配
在一个查找模式中,”或” 运算符是 “\|”。例如:/foo\|bar
这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:/one\|two\|three
匹配 “one”,”two” 或 “three”。
如要匹配其多次重复,那么整个抉择结构须置于 “ ”和“ ” 之间:/ foo∥bar \+
这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。
再举个例子:
/end if∥while∥for 这个命令匹配 “endif”,”endwhile” 和 “endfor”。

皮皮Blog



@H_301_4@vim 的额外功能

区块选择(Visual Block)

区块选择的按键意义

v 字符选择,会将光标经过的地方反白选择!
@H_301_4@V @H_301_4@列选择,会将光标经过的列反白选择!
@H_301_4@[Ctrl]+v @H_301_4@区块选择,可以用长方形的方式选择数据。
有时鼠标模式不对,可能需要使用ctrl+v再快速按shift(操作不好可能变成了ctrl+shift+v粘贴了),不知道有没其它解决方
y 将反白的地方复制起来
d 将反白的地方删除
p 将刚刚复制的区块,在光标所在处贴上!

可视模式

标记文本
v
进入可视模式,单字符模式
V
进入可视模式,行模式
ctrl+v
进入可视模式,列模式 ,类似于UE的列模式
o
跳转光标到选中块的另一个端点
U
将选中块中的内容转成大写
O
跳转光标到块的另一个端点
aw
选中一个字
ab
选中括号中的所有内容包括括号本身
aB
选中{}括号中的所有内容
ib
选中括号中的内容,不含括号
iB
选中{}中的内容,不含{}
标记进行动作
>
块右移
<
块左移
y
复制块
d
删除
~
切换块中内容的大小写

文件编辑

(最好使用多标签tab,这样可以在不同窗口间通过快捷键切换)

文件编辑的按键

:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件

q ”来离开 vim 的多文件编辑。

多窗口功能

:sp {filename} filename 可有可无, 如果想要在新窗口启动另一个文件,就加入文件

仅输入 :sp 时, 出现的则是同一个文件在两个窗口间!

多窗口情况下的按键功能

:sp [filename] 打开一个新窗口,如果有加 filename, 表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示)。
[ctrl]+w+ j [ctrl]+w+↓ 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下方向键),则光标可移动到下方的窗口。
[ctrl]+w+ k [ctrl]+w+↑ 同上,不过光标移动到上面的窗口。
[ctrl]+w+ q 其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 @H_301_4@:q 即可离开, 也可以按下 [ctrl]+w+q 啊!
水平分割窗口 ctrl+w s
垂直分割窗口 ctrl+w v

切换窗口 @H_301_4@ctrl+w w
退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口) ctrl+w

标签编辑

用法
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab(文件存在或不存在都可以)

vim -p * 就是编辑当前目录的所有文件,这样就可以使用gt在不同文件间切换了。使用vim *不能使用gt切换(不知道为啥)。

:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下的tab间切换
gt,gT 可以直接在tab之间切换
其它命令:help table

Note: 加了插件NERDTree后还可以使用F2打开文件目录树,双击打开新的tab。

@H_301_4@vim的复制和粘贴及与系统剪切板的交互

要与系统交互要安装sudo apt-get install -y vim-gnome。

显示所有寄存器内容::reg
其中注意两个特殊的寄存器:@H_301_4@"* 和 "+。这两个寄存器是和系统相通的,前者关联系统选择缓冲区,后者关联系统剪切板。通过它们可以和其他程序进行数据交换。
备注:若寄存器列表里无"* 或 "+ 寄存器,则可能是由于没有安装vim的图形界面所致。Debian/Ubuntu下可以通过安装vim-gnome解决

@H_301_4@不同于Windows,Linux系统里存在两个剪切板:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard)。选择缓冲区是实时的,当使用鼠标或键盘选择内容时,内容已经存在于选择缓冲区了,这或许就是选择缓冲区的由来吧。

鼠标的不同模式下的复制和粘贴

:set mouse=a时,vim中选择的同时不会选中行号,点击中键会复制到缓冲区(而不是剪切板),这时再点击鼠标中键可以粘贴在同一个vim中。

但是如果安装了vim-gnome,这时就存在"*寄存器,选择文字就可以复制到系统其它地方了!而且复制是不带行号的,彻底解决了vim中选择带行号的复制问题(lz推荐)

:set mouse=v时,vim中选择的同时会选中行号,而且要使用ct+sh+c来选择文字

vim有一个可视模式(Visual Mode),在此模式下可以选择区域。可以在普通模式下键入v进入可视模式,也可以个性化一点,键入V进入行可视模式,或者键入Ctrl+v进入列可视模式。这时移动光标就可以选择内容了。注意这时被选内容已经实时保存于选择缓冲区了,当然你也可以键入”+y将此内容也保存到剪切板里,或者”ay将内容保存到标签为a的寄存器中。

vim不同文件间的交互

vim多tab打开文件后就可以使用vim在不同文件间复制粘贴了,是不是很皮皮!

Note: 还有一种vim复制粘贴方法,不过必须是同一个vim打开的。

复制内容到选择缓冲区。

带行号时,使用鼠标选择内容区域。

不要行号,使用 “*yny 复制n行或可视模式下选择。

将选择缓冲区中内容粘贴到vim文件:普通模式下按 “*p

与系统剪切板的交互

很多时候使用 Vim 编辑文本,总需要复制里面的东西出来,粘贴到其他地方,比如说网页,聊天窗口等等,而有些时候有需要从网页等地方复制文字过来粘贴到 Vim 正在编辑的文件里。这个两个过程应该怎么完成呢?
一般的解决方法
复制文本
当我们要将 Vim 里面的文本复制出来,往往会用@H_301_4@鼠标选中,然后到需要粘贴的地方小点下鼠标中键或 Shift + Insert,完成复制粘贴的过程。
但 Vim 设置显示行号,多窗口使用,或者使用 Tmux 这类有利于提高效率的工具的时候,这样选择未必行的通。
这时候,需要鼠标可以选中 Vim 单个窗口且不包含行号的文本,可以使用 :set mouse=a,让 Vim 支持鼠标选择,大概事情就可以解决,这样的感觉也挺爽的,赶紧把 set mouse=a 加入你的 .vimrc 文件:)

粘贴文本
当我们在其他地方选择文本后,想粘贴到 Vim,一般都会切换到插入模式点鼠标中键或 Shift + Insert,完成复制粘贴的过程。
但有些时候,比如说复制在网页一些代码,粘贴时有时会出现不对齐,前面未加注释代码却被加上注释,这样一些恼人的问题。
这时候,可以通过 :set paste 将 Vim 设置为粘贴模式后再进行粘贴,既然是两种模式,肯定是有区别的,:set nopaste 是返回正常模式。这么干毕竟不方便,可以通过 .vimrc 添加映射来解决这个问题,更是有 set pastetoggle= 这个方便的选项,若在 .vimrc 文件添加 set pastetoggle=<F11>,则 F11 为粘贴模式的切换键。
比较 Vim 的方法
上述方法,大致可以解决问题,但很多同学并不喜欢用这种方式来复制粘贴,或是喜欢键盘操作的爽快,或是习惯了 Windows 下那套 Ctrl + c,Ctrl + v,通过系统剪切板来实现。还有,使用 VirtualBox 的时候,若设置剪切板互通,也是用到系统剪切板。
Vim 不是通过 Ctrl + c,Ctrl + x,Ctrl + v 来实现复制、剪切、粘贴的,而是通过 y,d,p 这些更为方便的键来实现各种复杂的文本操作。
对于和系统剪贴板的交互,又应该怎么用呢?遇到问题一般第一个寻找的是帮助文档,剪切板即是 Clipboard。
通过 :h clipboard 查看帮助, When using this register under X11,also see x11-selection. 若在 X11 中使用该寄存器,另见 x11-selection。
顺着思路 :h x11-selection,里面详细地介绍了 Vim 提供的使用 X11 主选择缓冲区和剪切板的方法,它们是通过 "* 和 "+ 两个寄存器来实现。
大致可以明白,在 Windows 上只能通过 Clipboard,而可爱的 X11 却还给了我们 Primary,所以有了选中即复制,鼠标中间即粘贴这么神奇的粘贴操作。
在 Vim 里,正常模式下,复制文本到 Clipboard,基本只是在前面加上 "+,其他一样,例如
复制当前行
"+yy 或 "+Y
复制当前行及向下二行
"+y2j
选择后复制
Vjj"+y
复制到 Primary 和复制到 Clipboard 差不多,这里就不再详述,而粘贴则是加 p,自然还有剪切 d。

[Vim 与系统剪切板交互 ]

[Vim 复制粘贴探秘*]

VIM 手册中关于mouse选项的说明

'mouse'
字符串 (缺省为 ”“,GUI、MS-DOS 和 Win32 为 “a”) 全局 {Vi 无此功能}
允许使用鼠标。只可用于特定终端 (xterm、MS-DOS、Win32 |win32-mouse|、 QNX pterm 和带 gpm 的 Linux 控制台)。关于 GUI 里如何使用鼠标,见 |gui-mouse|。
鼠标可以为不同模式分别打开:
n 普通模式
v 可视模式
i 插入模式
c 命令行模式
h 编辑帮助文件时,所有前面的模式
a 所有前面的模式
r |hit-enter| 和 |more-prompt| 提示
A 可视模式的自动选择
通常你会这样为所有四个模式打开鼠标:
:set mouse=a
如果鼠标没有打开,GUI 仍然使用鼠标进行无模式的选择。此行为不会移动文本光标。见 |mouse-using|。另见 |'clipboard'|。
注意: 在终端里打开鼠标时,如果能连接到 X 服务器,复制/粘贴会使用 * 寄存器。按住 Shift 键就仍然可以使用 xterm 对鼠标按钮的处理。

vim 的挑字补全功能

vim 环境设置与记录: ~/.vimrc,~/.viminfo

[vim自定义设置-配置文件 ]

其他 vim 使用注意事项

中文编码问题

DOS 不 Linux 癿断行字符: dos2unix,unix2dos

语系编码转换: iconv

皮皮Blog


@H_301_4@其它

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

寄存器操作
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

宏命令(Macros)
高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的:
:qx
开始记录宏,并将结果存入寄存器x
q 退出记录模式
@x 播放记录在x寄存器中的宏命令
稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模式,然后输入@x对刚才记录下来的命令进行重复,此命令后可跟数字,表示要重复多少次,比如@x20
可以重复20次。这个在文本的批处理中是非常有用的。
同时编辑多个文件
在vim众多的插件中,有一个叫minibuffer的插件,就是下面所说的标签功能了,可以支持同时编辑多个文件
标签命令
:tabe fn
在一个新的标签页中编辑文件fn
gt 切换到下一个标签
gT 切换到上一个标签
:tabr 切换到第一个标签
:tabl 切换到最后一个标签
:tabm [N] 把当前tab移动到第N个tab之后
跟eclipse,ue等的标签页是一个意思!
其他
vim在保存之前不会对文件做实际的修改,只是加载到缓冲区中,对文件的编辑其实是对缓冲区的编辑,直到:w时才会存入物理文件
:e file
把file加载到新的缓冲区中
:bn
跳转到下一个缓冲区
:bd
删除缓冲区(关闭文件)
:sp fn
分割窗口,并将fn加载到新的窗口中
”Ctrl + }“ 可以跳转函数或变量的定义处,“Ctrl + o”可以返回上一个@R_602_404@面。
书签
ma
把当前位置存标签a
`a
跳转标签a处

文件处理相关命令

:set fileformat 设置文件格式
:set endofline 设置文件结束符
:set noendofline 取消文件结束符
:set list 进入List Mode
:set nolist 退出List Mode
:%s/n//g 删除换行符
:set textwidth 设置行宽
:set textwidth 设置行边距
:join 合并多行
J 合并两行

此外,关于ASCII字符,Linux下面有个简要的介绍:man ascii

^M 是ascii中的'r'回车符,是16进制的0x0D,8进制的015,十进制的13;

对于换行这个动作,unix下一般只有一个0x0A表示换行
windows下一般都是0x0D和0x0A两个字符。
^L 是ascii 0x0C 'f',换页控制符 。

设置文件编码

:set encoding=utf-8
:set fileencodings=ucs-bom,utf-8,cp936
:set fileencoding=gb2312
:set termencoding=utf-8

如何消除vi中的^M

我刚开始去用sed命令:

 
  1. sed 's/^M//g' file_old > file_new

执行后查看不成功,输出文件,用vi打开,还是带^M。
后来到网上搜到了可以用的办法,用tr命令:

 
  1. tr -d "15" < myfile.txt > myfile_new.txt

可以把符号^M(即"15")去掉,并另存为新文件myfile_new.txt 。

vim显示空格、tab字符及多行注释

显示 TAB 键

文件中有 TAB 键的时候,你是看不见的。要把它显示出来:

 
  1. :set list TAB

显示为 ^I,$显示在每行的结尾,表示换行,Vim 可以用高亮显示空格和TAB。

Vim多行缩进技巧

关键字: vim indent
按v进入visual状态,选择多行,用>或<缩进或缩出
通常根据语言特征使用自动缩进排版:

在命令状态下对当前行用== (连按=两次),或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。

使用gg=G可对整篇代码进行排版。

vim 多行注释

 
  1. :20,30 s/^/#/g 第20到30行用 # 注释掉。
  2. :20,30 s/^#//g 取消注释
  3. :4,10 s/^[^I ]+// 去掉行首的空白字符 用 . 表示当前行。
  4. :.,30 s/^/#/g 可以看到 vim 命令针对当前行,在前面加个范围就可以针对多行。
  5. :co 12 把当前行 copy 到行 12 的地方。

[vi查看空格、制表符等特殊符号]

皮皮Blog

from:http://www.jb51.cc/article/p-btwkdhcl-bbo.html

ref:Vim自动补全神器:YouCompleteMe

ubuntu Vim用户操作指南

个人使用VIM的一些总结

vim学习网站[vim-adventureopenvim]

猜你在找的Bash相关文章