配置
you should modify the vim
configuration file. The file is called vimrc
, and it is located under /etc/vim
directory. We first make a copy of it to the home directory by cp
command:
cp /etc/vim/vimrc ~/.vimrc
open .vimrc
using vim
:
vim ~/.vimrc
builtin help system
报错/etc/apt/sources.list” E212: Can’t open file for writing
Running :h E212
inside Vim
:h <
全选复制粘贴
缓冲区
Vim 中的复制、删除的内容默认都会被存放到默认(未命名)寄存器中,之后可以通过粘贴操作读取默认寄存器中的内容。寄存器是完成这一过程的中转站,Vim 支持的寄存器非常多,其中常用的有 a-zA-Z0-9+"
。
其中:
0-9
:表示数字寄存器,是 Vim 用来保存最近复制、删除等操作的内容,其中 0 号寄存器保存的是最近一次的操作内容。
a-zA-Z
:表示用户寄存器,Vim 不会读写这部分寄存器
"
(单个双引号):未命名的寄存器,是 Vim 的默认寄存器,例如删除、复制等操作的内容都会被保存到这里。
+
:剪切板寄存器,关联系统剪切板,保存在这个寄存器中的内容可以被系统其他程序访问,也可以通过这个寄存器访问其他程序保存到剪切板中的内容。
全选并复制到系统剪切板【好像没用?】
gg
到首行,然后"+yG
把行首到行尾的内容复制到+
寄存器。
"+yy // 复制当前行到剪切板
"+p // 将剪切板内容粘贴到光标后面
"ayy // 复制当前行到寄存器 a
"ap // 将寄存器 a 中的内容粘贴到光标后面
根据平台不同,要分两种情况。先用下面命令确定你属于哪一种,
vim --version | grep clipboard
不支持系统粘贴板
情况一,
如果结果里你找到加号开头的**+clipboard**
, 恭喜你,你的vim没问题,是你姿势问题。
- 用
**"+y**
代替y
将选中的内容复制到系统剪贴板,效果和ctrl-c
一致。 - 用**
"+p
**代替p
将剪贴板内容复制到指定位置,也可以用ctrl-v
。
d
,x
,c
,s
也一样,用之前前面加**"+**
。
如果想偷懒用y
直接把内容复制到系统剪贴板,需要到vim配置文件.vimrc
里加一行属性。用下面命令开始配置,
vim ~/.vimrc
然后,加入下面这行,
set clipboard=unnamed
现在你的y
,d
,x
,p
已经能和 ctrl-c
和ctrl-v
一个效果,并且能互相混用。
情况二,
如果找到的是负号开头的**-clipboard
,**说明你的vim不支持系统剪切板,我的MacOS系统自带vim就不支持,所以跑来了。需要先重新安装vim,
Linux系统,
sudo apt install vim-gtk
MacOS,
brew install vim
安装好之后,重复情况一的操作即可。
命令
- 选定文本块。使用v进入可视模式,移动光标键选定内容。
- 复制的命令是y,即yank(提起) ,常用的命令如下:
y 在使用v模式选定了某一块的时候,复制选定块到缓冲区用;
yy 复制整行(nyy或者yny ,复制n行,n为数字);
y^ 复制当前到行头的内容;
y$ 复制当前到行尾的内容;
yw 复制一个word (nyw或者ynw,复制n个word,n为数字);
yG 复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾) - 剪切的命令是d,即delete,d与y命令基本类似,所以两个命令用法一样,包括含有数字的用法.
d 剪切选定块到缓冲区;
dd 剪切整行
d^ 剪切至行首
d$ 剪切至行尾
dw 剪切一个word
dG 剪切至档尾 - 粘贴的命令式p,即put(放下)
p 小写p代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面
P 大写P代表贴至游标前(上)
整行的复制粘贴在游标的上(下)一行,非整行的复制则是粘贴在游标的前(后) - 全选:ggVG
注:
命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。使用英文句号”.”可以重复上一个命令。
navigate
非编辑(normal)模式下:
行间
shift+g 跳转到最后一行
gg 跳转到第一行
nG
移动光标到当前文件的第n行:n
移动光标到当前文件的第n行 (同上)
行内
0
移动光标到当前行行首$
移动光标到当前行行尾^
移动光标到当前行的第一个非空字符
单词级
w
移动到下一单词的开头b
移动到上一单词的开头e
移动到光标所在单词的末尾
查找
1,查找
在normal模式下按下/
即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n
查找下一个,按下N
查找上一个。
Vim查找支持正则表达式,例如/vim$
匹配行尾的"vim"
。 需要查找特殊字符需要转义,例如/vim\$
匹配"vim$"
。
2,大小写敏感查找
在查找模式中加入\c
表示大小写不敏感查找,\C
表示大小写敏感查找。例如:
/foo\c
将会查找所有的"foo"
,"FOO"
,"Foo"
等字符串。
3,查找当前单词
在normal模式下按下*
即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。例如当前为foo
, 可以匹配foo bar
中的foo
,但不可匹配foobar
中的foo
。 这在查找函数名、变量名时非常有用。
按下g*
即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即foo bar
和foobar
中的foo
均可被匹配到。
替换
:s
(substitute)命令用来查找和替换字符串。语法如下:
:{作用范围}s/{目标}/{替换}/{替换标志}
例如:%s/foo/bar/g
会在全局范围(%
)查找foo
并替换为bar
,所有出现都会被替换(g
)。
:%s/blog_os/yzq_os/g
作用范围
作用范围分为当前行、全文、选区等等。
当前行:
:s/foo/bar/g
全文:
:%s/foo/bar/g
选区,在Visual模式下选择区域后输入:
,Vim即可自动补全为 :'<,'>
。
:'<,'>s/foo/bar/g
2-11行:
:5,12s/foo/bar/g
当前行.
与接下来两行+2
:
:.,+2s/foo/bar/g
代码折叠
在可折叠处(大括号中间):
1 zc 折叠
2 zC 对所在范围内所有嵌套的折叠点进行折叠
3 zo 展开折叠
4 zO 对所在范围内所有嵌套的折叠点展开
5 [z 到当前打开的折叠的开始处。
6 ]z 到当前打开的折叠的末尾处。
7 zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
8 zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。