vimer linux kernel 爱好者

vim使用技巧

2016-06-27

我的配置文件

首先说明

这篇文章不是从简单的vim操作开始,它只是我自己的使用vim的过程中有些记忆不牢靠的地方,所以记录下来,如何没有帮助你,请不要生气

以下操作是在正常模式下进行的。

Copy, paste

如果在两个vim编辑器中,可以使用”yy”&”p”,但是使用这个命令,vim内部寄存器的内容无法推送到系统的粘贴板中,就会导致无法在vi 和其他应用程序之间转移数据,那么,怎么办呢?

在vim的配置文件中: set clipboard 使用 xclip.

在debian下,

sudo apt install xclip

首先,使用”ggVG”和”y”将所有的vim正在编辑的文本内容发送到xclip程序中,接着打开另一个终端,键入下面的命令:

xclip -o

这个时候再使用“shift” + “ctrl” + “c” copy 到系统的粘贴板上就可以使用了。

退出

这个居然也有快捷键,就是两个大写的ZZ,并且效果等同于:wq

移动到指定字符

h、j、k、l 分别表示左、下、上、右的移动的方向,其中j、k是在行间移动。 h、l是在行内的字符中移动。

如果想在当前行内快速的移动,则可以使用f、t和F、T命令。

“f“命令移动到光标右边的指定字符上,例如,”fx“,会把移动到光标右边的第一个’x’字符上。”F“命令则反方向查找,也就是移动到光标左边的指定字符上。

“t“命令和”f“命令的区别在于,它移动到光标右边的指定字符之前。例如,”tx“会移动到光标右边第一个’x’字符的前面。”T“命令是”t“命令的反向版本,它移动到光标右边的指定字符之后。

这四个命令只在当前行中移动光标,光标不会跨越回车换行符。

可以在命令前面使用数字,表示倍数。例如,”3fx“表示移动到光标右边的第3个’x’字符上。

“;“命令重复前一次输入的f, t, F, T命令,而”,“命令会反方向重复前一次输入的f, t, F, T命令。这两个命令前也可以使用数字来表示倍数。

参考

移动到行首、行尾

在vim中,移动到行尾的快捷键是$,移动到行首的快捷键是0.^是移动到行首第一个 非空的字符处

按单词移动

vim中,移动光标到下一个单词的词首,使用命令”w“,移动光标到上一个单词的词首,使用命令”b“;移动光标到下一个单词的结尾,用命令”e“,移动光标到上一个单词的结尾,使用命令”ge“。

翻页

Ctrl-f 即 PageDown 翻页。

Crtl-b 即 PageUp 翻页。

Ctrl + U 向上翻半页

Ctrl + D 向下翻半页

删除单词

d 命令有这个功能,比如,“dw”,这样留下的是normal模式,使用这个“cw”的模式,可以擦除这个字并且处于插入模式下。

. 命令

你没有看错,这就是一个 . 命令,让你重复上一次的命令。

合并命令

“J”命令就是将2行合并一行的命令。

改变大小写

”~”就是这个键。

在编辑模式下操作

here

其中用的最多的就是在插入模式下,输入多余的字的问题,在stackoverflow上有一个问题,就是问到这的,看来我这样的习惯还是不少的。

在插入模式移动光标

Ctrl + o 然后你可以随意的使用normal模式下的行为一次。

Ctrl + t 在编辑模式下缩进一个tab键

Ctrl + d 在编辑模式下回退一个tab键

使用Ctrl + ^ 去代替Caps Lock 键

这个在我的配置文件中实现了这样的功能,请使用Ctrl+f寻找一下。

搜索

简单搜索

/strings 就是搜索strings的字符串

注意, .*[]^%$~ 这些字符有特殊的含义, 想搜寻他们的话,必须使用”".

?

从文件的后面向前查找, 在显示匹配高亮的时候,按下”n”,就给你移动到下一条。

”/”是从前往后查找, 如果你接着执行”?”就会让你从后往前找。

文本

首先说明一点,vim的粘贴板其实一直很厉害,关键是自己没有开发出来,vim可以有26个粘贴板的。

cut, paste, copy

当你使用“dw”或者“dd”的命令是,再按一次p就把刚才删除的单词重新复制回来了。

如果你想键入“the”,但是你不小心输入了“teh”, 这是很正常的行为,这里,你可以将光标移动到字母“e“上,接着使用”xp“命令即可。”x”是删除字母e并保存到寄存器中,”p”将文字放到光标之后,”P”是将光标放到单词之后。

删除一大块text

这是强悍,你可能都没有听说过的方法。使用标记命令: mark

  1. 在你想要删除文本的地方使用命令 ‘ma’

  2. 移动光标到你想要删除文本的末尾

  3. 使用命令 “d’a”

其中的’a’可以使用其他的小写字母。

使用命令:

: marks

会展示所有的marks,如果使用

: marks args

就会展示当前文件的mark所在的行。

上面marks命令的第三个步骤,可以将d换为y,那样就成了复制一整大的文本。

过滤

这个技术用的这不多,这里有两类主要的:

在normal模式下,”!!ls”和”!!date”是最常用的命令。

编辑多个文件

vim 1.c 2.c 这样就会只打开1.c,如果你想快速切换到2.c,那么需要输入”: next”,在2.c中回到1.c, 需要使用”: previous”.

不在insert模式下,你可以使用”Ctrl+^”来切换这两个文件的编辑。

(注意,我将这个命令在insert模式下改为转为开启Caps Lock键,详情就在本文中)

正在编辑哪个文件

”: args”就是这个命令。

界面

打开一个新的窗口

:split

想要切换编辑的窗口的命令是”ctrl+w”

:split new-file

buffers

这块的东西有点罗嗦,

  1. 活动的(Action)

  2. 隐藏的(Hidden)

  3. 未活动的(Inactive)

    :buffers

这句命令就是找出所有的buffers.

-	Inactive buffer

h	buffer is hidden

%	Current file

#	Alternate buffer

+	File has been modified

选择一个buffer

当你使用上面的命令,就会列出所有的buffer,怎么选择其中的一个呢?很简单,就是使用

:3buffer

或者

:sbuffer number

其中第一种方法可以在原视图中打开,这样就不会被分割太小了。带”s”的可以看成”split”和”buffer”的合体。

visual mode

先说一下visual是干什么用的。当你使用这个模式,你可以将某一块的文本选中,并且会高亮,然后你就可以处理其他的事务了。

进入

在normal模式下按下”v”键就可以了。注意这里,按下小写的”v”,是基于字符的visual mode,如果是大写的”V”,那么直接选中整行。如果这时候接着使用”Ctrl + v”则会以正方形的格式呈现。

编辑

如同在其他模式下的编辑一样,只不过已经选中了某快区域。

d

如果你选中了一行的一个字,这个命令就会删除那个选中的字。

D

如果你选中了一行的一个字,这个命令就会删除整行的字。

整体偏移 >

发现了一个在写markdown文件有用的文件了,就是使用visual mode选中文本(最好用”ctrl + v”)整体选中,接着按下”>”就可以整体偏移一个Tab键了。

程序员的指令

vim融合了很多的指令,这些指令对于你提高开发进度,具有不小的作用。

列出函数定义处

([CTRL-I, ]CTRL-I)是找出函数定义,这个命令,真的很有用,配合ctags,详情另看我的另一篇文章。

变量定义

“gd” 是寻找局部的变量定义,”gD”是寻找全局的变量定义。当然,前提是你把光标放在变量处。

展示宏定义

在定义的关键词处,按下”[d”两个键即可展示出相关的宏。

匹配括号

无论什么括号,都可以通过”%”来匹配另一半。对于c语言来说,还有评论(/* */), #if,#else,#endif

其他的作用,比如,如果有以下的代码:

void test()
{
	{
	printf("hello\n"):
	}

}

你想着把代码块(里层)的printf语句缩进一个tab键,你可以使用visual mode,然后”>”,你还可以使用”%”键选择括号后,使用”>i{“这个组合,意思就是”inner {} block”

寻找man 手册

比如,你在写c语言的时候,恰巧不知道这儿的一个系统调用open()怎么使用,你可以将光标放在open上,按下大写的”K”,就可以看到man手册了

展示文件空格情况

这一个在Makefile文件的编写中具有很大的价值,因为Makefile特别注意这样的错误,那么使用

:set list

就可以看出是不是缩进的一个tab键(“^I”)

排序

有两种方式,只不过就是运用命令”!sort”的改进版。这里简单的介绍一种:

  1. 利用visual模式选中你想要排序的文本

  2. 执行”!sort”

Make文本

:make

这一部分才是vim对于c的厉害之处,现在,先看一下,其中的奥妙。

在你键入了上面的命令之后,如果没有错误报出,那么恭喜你,你的程序没有语法错误,假如不幸,报错了,使用下面的方法就可以让自己省点时间去调试错误。

先说第一点,就是有错误出来了,那么按一下”Enter”键,就会返回到你的程序的第一个出错点,光标就是定格在那里,不用动。修改完了,使用:

:cprevious

:cNext

目测这两个函数不是很好用,那么,

:clist or :cc

就很有用处了。前者是将错误列表重新显现,后者是展现现在的错误。

搜索字符串

真没有想到vim还提供这样的命令,

:grep -w printf *.c

在当前目录下grep所有的printf的关键词,其中,”-w”是全词匹配。

好,写了不少了,vim的基本技巧就写道这了,下一次我们开始另一篇神奇之旅。 谢谢!!!

替换字符串

可以直接使用, 在noraml模式下:

:1,ns/old-string/new-strng/g
# $: 最后一个

Comments

Content