set wrap
换行
Go to the 143rd line of file
$ vim +143 filename.txt
Go to the first match of the specified
$ vim +/search-term filename.txt
Open the file in read only mode.
$ vim -R /etc/passwd
vim v1.1.txt -c "'m"
https://www.dushiwei.cn/post/467
有时我们需要在vim中打开一个文件,然后需要去一个特定的行号,以便检查某些东西或编辑某些东西。 这就是我们如何在vim中打开一个文件,并直接把光标放在我们感兴趣的所需行上。
方法-
使用vim -c 参数
From VIM(1) man page:
-c {command}
{command} will be executed after the first file has been read. {command} is interpreted as an
Ex command. If the {command} contains spaces it must be enclosed in double quotes (this
depends on the shell that is used). Example: Vim "+set si" main.c
范例:
打开run_parallel_qs.py并跳转到23行
vim -c 23 run_parallel_qs.py
方法二
可以使用+来指定光标起始点。
打开run_parallel_qs.py并跳转到23行
vim +23 run_parallel_qs.py
等同于
打开run_parallel_qs.py并跳转到23行
vim run_parallel_qs.py +23
当使用第二种方式的时候如果不知道+后面的数字行数,会将光标指定到文件结尾处
而且我们知道只要在vi / vim中打开一个文件,光标将位于第一行
而且我们知道只要在vi / vim中打开一个文件,光标将位于第一行
edit %:h编辑当前目录别的文件
:read !ls -rlht 将命令结果输入到文件中
vim中执行多条命令
:ls | !pwd
:set history=200
q:可以调出history命令
vim中运行shell命令
如果想在vim中执行几条命令时该怎么做?
输入:shell
退出输入exit
hello
the world
中华人民共和国
现在想在三行都加上句号,
1. shift+v
2. 3jj
3. :'<,'>normal A, <Cr>
https://www.oschina.net/news/43167/130-essential-vim-commands
搜索
/word | Search word from top to bottom |
?word | Search word from bottom to top |
* | Search the word under cursor |
/\cstring | Search STRING or string, case insensitive |
/jo[ha]n | Search john or joan |
/\< the | Search the, theatre or then |
/the\> | Search the or breathe |
/\< the\> | Search the |
/\< ¦.\> | Search all words of 4 letters |
/\/ | Search fred but not alfred or frederick |
/fred\|joe | Search fred or joe |
/\<\d\d\d\d\> | Search exactly 4 digits |
/^\n\{3} | Find 3 empty lines |
:bufdo /searchstr/ | Search in all open files |
bufdo %s/something/somethingelse/g | Search something in all the open buffers and replace it with somethingelse |
[[ 跳转到函数开头
[{ 跳转到{block开头
vim中运算
首先进入插入模式,
然后<C-r>=1+2<CR>
vim goldrush.txt +9
打开goldrush.txt并跳转到第9行
vim中搜索使用寄存器的内容
/<C-r>a 查找寄存器a内容
%在匹配括号间跳转
查找命令不仅限于普通模式下使用,我们也可以在可视模式及操作符待决模式中使用它,用来完成实际的工作。
this phrase takes time but eventually gets to the point.
删除takes time but eventually
第一种方法
1. ft
2. v/geh
3. d
第二种方法
1. ft
2. d/ge
i've been expecting you,mister Bond.
改为i've been expecting you.
1. f,
2. dt.
3. esc
go fast.
改为go faster.
1. ff
2. eaer
3. esc
w b 下一个单词开头,上一个单词开头
e ge 下一个单词结尾,上一个单词结尾
fc 查找以c开头的单词,;重复执行fc
命令小结
f | 向前搜索并将光标停留在目标字符上 |
F | 向后搜索并将光标停留在目标字符上 |
; | 重复刚才的查找 |
, | 反向重复刚才的查找 |
t | 向前搜索并将光标停留在目标字符的前一个字符上 |
T | 向后搜索并将光标停留在目标字符的后一个字符上 |
/ | 向前查找 |
? | 向后查找 |
n | 继续查找 |
N | 反向查找 |
* | 向前查找与当前光标下字符精确匹配的字符串 |
# | 向后查找与当前光标下字符精确匹配的字符串 |
:set hlsearch | 打开高亮显示查找的文本 |
:set nohlsearch | 关闭高亮显示查找的文本 |
:nohlsearch | 关闭当前高亮显示的结果 |
:set incsearch | 打开显示查找匹配过程 |
:set noincsearch | 关闭显示查找匹配过程 |
:set ignorecase | 忽略大小写 |
:set noignorecase | 精确匹配大小写 |
:set nowrapscan | 禁止循环查找方式 |
:set wrapscan | 启用循环查找方式 |
删除到文件开头
dgg
vim格式对齐命令
转:http://blog.chinaunix.net/uid-23544240-id-3758838.html
方法一:
命令模式下:=:1,$
方法二:
gg(把关标定位到最上面),V(进入VISUAL模式),shift+g(选中整篇文本),然后=。
方法三:
gg=G
vimrc大全
http://www.amix.dk/vim/vimrc.html
删除好方法
This phrase takes time but
eventually gets to the point.
比如我们想takes time but eventually
第一种方法
1、光标定位到takes
2、v
3、/ge回车
4、d
第二种方法
1、光标定位到takes
2、d/ge回车
ex模式:vim命令行模式,
1文件的第一行
$文件的最后一行
0虚拟行,第一行上方
. 光标所在行
'm 包含位置标记m的行
'< 高亮选区的起始行
'> 高度选区的结束行
% 整个文件,1,$的简写
ESC 切换到普通模式
ctrl+[ 切换到普通模式
ctrl+o 切换到插入-普通模式
ctrl+h 删除前一个字符,同退格键
ctrl+w 删除前一个单词
ctrl+u 删除至行首
g~ 反转大小写
gu 转换为小写
gU 转换为大写
> 增加缩进
< 减小缩进
= 自动缩进
. 重复命令,上次的普通模式命令
@ 重复命令,上次的ex命令
; 查找下一个针对用f+来搜索
, 查找上一个针对用f+来搜索
* 查找当前光标下的单词
s 先删除光标下的字符,然后进入插入模式
cw 修改光标下单词
a 光标后一个字符处插入
A 光标所在行的末尾处插入
i 光标前一个字符处插入
I 光标所在行的行首处插入
o 下一行
O 上一行
dw 从当前位置删除到下一个单词开头 diw 删除光标上的单词(不包括空白字符)
daw 删除光标上的单词(包括空白字符)
yw 复制光标上的单词,包括空白字符
yiw 复制光标上的单词,不包括空白字符
p 光标之后粘贴
P 光标之前粘贴
demo
xp调换光标前后的两个字符
ddp调换当前行与它的下一行
将当前的单词复制到寄存器a中,可以执行"ayiw,输入"ap粘贴寄存器a的单词
可以用"bdd,将当前整行文本剪切至寄存器b中,输入"bp粘贴来自寄存器b的一整行文本
命令行模式中可以用
:delete c将当前行剪切到寄存器c中,
:put c将寄存器c的内容粘贴到当前行中
vim无名寄存器""
""p完全等同于p命令
复制专用寄存器,"0
当我们使用y命令时,要复制的文本不仅会被拷贝到无名寄存器中,而且也被拷贝到了复制专用寄存器中,后者可用数字0加以引用。
:reg可以查看寄存器的内容
黑洞寄存器
"_d将删除内容不保存任何副本
系统剪贴板"+与选择专用寄存器"*
系统剪贴板,vim与其他的程序打交道,必须使用系统剪贴板
vim的加号寄存器与系统剪贴板等效,可用+号引用
我们在外部程序中剪切或复制命令获取了文本,就可以用"+p命令或在插入模式下用+将其粘贴到vim中来
相反地在vim中复制或剪切之前加入"+相应的文本将被捕获至系统剪贴板,这意味着我们能够轻松地把文本粘贴到其他应用程序中了。
x11视窗系统支持另一种被叫做主剪贴板的剪贴板,它保存着上次被高亮选中的文本,可以用鼠标中键把它们粘贴出来,vim的星号寄存器对应主剪贴板,可以*号加以引用。
可在vim中输入:version命令,然后查找xterm_clipboard关键字,如果它前面有个减号,表示不支持,加号表示支持。
vim中跳转到光标下的文件
gf命令即可
vim中文件间跳转
在浏览器中,我们习惯于用后退按钮返回之前浏览过的网页,而vim则通过跳转列表提供了类似的功能,ctrl+o命令像后退按钮一样,而与之互补的ctrl+i命令则像是前进按钮,这两条命令允许我们对vim的跳转列表进行遍历。
缓冲区
* vim file1 file2 多个文件调入缓冲
* :e filename 在vim中再打开文件
* :ls 列出所有的缓冲区
* :n 编辑下一个文件
* :bp 跳转到上一个缓冲区
* :bn 跳转到下一个缓冲区
* :bN 跳转到指定编号的缓冲区:b3
* :bd1 删除编号为1的缓冲区
*:bprev
*:bnext
*:bfirst
*:blast
*:first
*:last
shift insert 从系统拷贝到vim
:q与q:
:q退出
q:打开历史命令
vim保存文件到不存在的目录中
vim 1/1.txt
:!mkdir -p %:h
:w
在vim一行中快速移动,除了w,b外,还可以使用f+字母,或者F+字母来移动
vim中实际行与屏幕行
实际行set number后有行号,而屏幕行没有行号
h j k l操作实际行
而
gh gj gk gl操作屏幕行
H | 移动光标到当前屏幕上最上边的一行 |
M | 移动光标到当前屏幕上中间的一行 |
L | 移动光标到当前屏幕上最下边的一行 |
vim中使用鼠标set mouse=a
删除多行行尾的分号
one;
two;
three;
shift+a
backspace
esc
j.
快速复制多行
vim 1.txt
1
2
one
3
two
4
three
5
6
yap
gP
root@:/home/yansiyu#ls vim 1.html 1.txt
如果这个时候vim ./vim/1.txt
想打开vim中别的文件怎么办?
:vs %<Tab>
:vs %:h<Tab>
//:h修饰符会去除文件名,但保留路径中的其他部分,输入的%:h<Tab>会被展开为当前文件所在目录的路径
Ctrl + x:使光标下的数字做减1操作
Ctrl + a:使光标下的数字做加1操作
只要可能,最好用操作符命令,而不是可视命令
<a href="#">one</a>
<a href="#">two</a>
<a href="#">three</a>
1、vit shift+u j.
2、g+ shift+u + it j.
两种方法不一样
sudo du -s * | sort -nr | head 显示前10个占用空间最大的文件或目录
在win系统cmd中输入命令,可以按home与end键切换到开头与末尾
删除、复制指定个数个字符
比如 : 5yl 复制光标后的5个字符(包括光标所在的那个字符)
5yh 复制光标前的五个字符(不包括光标所在的那个字符)
5dl 删除光标后的5个字符(包括光标所在的那个字符)
5dh 删除光标前的5个字符(不包括光标所在的那个字符)
hello the world后面连续插入n个感叹号
只要在普通模式下把光标定位于d,然后按10a!……不对啊,才一个!,别急,再按两下Esc!哈哈,出来10个!了吧
现在保存并退出有更快的方法──直接在普通模式下按ZZ即可。
另外,用:e!可以不保存文件并重新载入这个文件。
删除单词和替换句子、复制单词
一般来说,d命令和aw,as,ap配合起来使用比较好,而c命令和iw及类似的文本对象一起用效果更好。
* 一般来说,用dw/de删除单词需要将光标定位于单词开头(de不会删除单词后的空格,dw会删除单词后的空格),用dw/de时需移到单词开头是因为dw/de会从光标所在的那个字符(包括该字符)开始删除直到该单词结束,但是如果用daw,则无需这样,只要光标在这个单词上就可以了(daw会将空格一起删除,daw=Delete a Word),如果不包括空格,就是diw;
* 替换句子的话,就用cis就行了(目前我试验出来的可以被用以标示一句话结束的标点符号是英文的问号?和句号. )
接下来看下复制:
yy命令复制当前整行的内容到vi缓冲区
yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词,而yaw/yiw也是复制一个单词,但光标可以处在该单词的任何位置,比起yw的需要移动到单词的首字符要方便。
y$复制光标所在位置到行尾内容到缓存区
y^复制光标所在位置到行首内容到缓存区
#yy 例如:5yy就是复制5行
#yw 例如:2yw就是复制两个单词