Vim 学习笔记

http://einverne.github.io/post/2015/05/vim-notes.html#advanced-move
http://einverne.github.io/post/2015/05/vim-advanced-notes.html

Posted on May 06, 2015 , Last modified on September 10, 2015 by Ein Verne | View revision history
If you don’t have time to watch this video, just take a look at this note. This note is taken from https://github.com/shawncplus/vim-classes with small modification.
https://github.com/shawncplus/dotfiles
this site let you make your own colorscheme
模式切换 Change between modes
Insert -> Normal : ESC/Ctrl-[Insert -> Command : (Insert -> Normal) -> :Normal -> Command : :Normal -> Insert : iIsScCoOCommand -> Normal : Enter

插入模式
i Enter insert modeI 行首非空字符前插入s 删除光标下字符,并进入insert modeS 删除光标所在一行,并进入insert mode行首a 光标之后进入insert modeA 光标移动到行尾并进入insert modeo 在光标下一行插入一行,并进入insert modeO 在光标上一行插入新行,并进入insert modeC 删除光标后到行尾并进入insert mode

replace mode
按如下两个按键进入替换模式:
r replace the letter under cursorR replace under cursor till you press Esc

advanced Move
在Vim中,Word有两种含义,开始我也没搞明白,过了很久才渐渐明白。广义的 WORD 可以是任何两个空格之间的内容,比如 this is a word
,就是四个“字”。侠义的 WORD ,英文单词、标点符号和非字母字符都被当成一个字。如$、%、^、&、*、(、)、-、+、{、}、[、]、~、|、\、<、>、/
等,均被当成是一个字。
Vim中使用大写命令一般将字作为广义,小写命令就是作为侠义对待。命令都是成对出现,w 和 W,b 和 B,e 和 E:
w 词向后移动W WORD is splited by spaceb 词向前移动B WORD向前移动e 移下一个单词词末ge 前一个单词词末E 如果光标起始位置处于字内(即非字尾处),则该命令将把光标移到本字字尾;如果光标起始位置处于字尾,则该命令将把光标移动到下一个字的字尾。0 Move to the zeroth character of the line^ move to first non-blank character of the line$ go to the end of lineg_ last character of the line

用了很多天Vim了移动最多用的还是hjkl,想不起来用这些零碎的命令啊~
以下命令可以用来翻页
Ctrl+f 下一页Ctrl+b 上一页Ctrl+d 下半页Ctrl+u 上半页H Move to first letter on top of screenM Move to first letter on middle of screenL Move to first letter on bottom of screen

move inline
fx 向前查找本行中的字符x, 比如想要移动到下一个双引号时,可以使用 f" 来实现行内快速移动F 向左查找

Copy/Paste
p paste after current positionP paste before the cursoryy copy the current liney - Yank. Example: yw (yank word) 光标停留到词第一个字母上 yw 复制单词y0 copy the data from cursor to begining of the liney$ copy the data from cursor to end of the line

删除 delete
x 删除光标下单个字符X 向前删除一个字符,相当于 Backspacedd 删除光标所在一行,并把该行复制dw 删除光标所在词d0 删除光标到该行最前d$ 删除光标到该行最后J 删除光标所在行的换行符

删除x ,dd ,dw用的情况还挺多的。
撤销/重做 redo
u 撤销上一次编辑 undo<C-r> Ctrl-R redo

搜索与替换 search replace
/pattern - 正向搜索,从光标处开始向文件末搜索?pattern - 反向搜索,从光标处开始向文件首搜索n - 下一个,往下执行搜索命令N - 上一个* - Word under cursor - forward (bounded)g* - Word under cursor - forward (unbounded)# - Word under cursor - backward (bounded)g# - Word under cursor - backward (unbounded):s/p1/p2/g -将当前行中所有p1均用p2替代:n1, n2s/p1/p2/g -将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g -将文件中所有p1均用p2替换

Load/Save/Quit/Change File
:e <path/to/file> open file:w save:saveas <path/to/file> save to <path/to/file>:x, ZZ or :wq save and quit (:x only save if necessary):q! quit without saving. :qa! to quit even if there are modified hidden buffers:q! 放弃修改之后可用 :e! 恢复修改 :e! 为放弃为保存的修改

Other
gg 文件开头G 文件末尾Ctrl-]Ctrl-O 跳转到上一个位置Ctrl-T 标签退栈

参考:
http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
http://fujun.sinaapp.com/category/vim
http://jinruhe.com/blog/archives/420

vim学习笔记进阶版,初级版可以参考这篇文章
combine command
. (dot) will repeat the last commandn<commmand> will repeat the command n times

for example:
2dd will delete 2 lines3p will paste the text 3 times40idesu [ESC] will write "desu " 40 times

move in one file
NG go to line N, N is a number, like 23G means go to line 23gg shortcut for 1G - go to the start of the fileG Go to last line

批量替换
在全文中用一个单词替换另外一个单词
:%s/想要被替换的字串/新字串/g g模式全局替换

”%” 范围前缀表示在所有行中执行替换, 相当于:1,$s/
,如果不加 %
则表示在当前行中
“g” 标记表示替换行中所有匹配点。

替换的语法为::[addr]s/源字符/目的字符/[option]
[addr] 表示检索范围, 省略表示当前行。
:n1,n2s/word1/word2/g 从 n1 行到 n2 行,替换 word1 为 word2 全局替换
:%s/ = :1,$s/
:.,$/word1/word2/g 从当前行到尾行

s: 表示替换操作
[option]表示操作类型
g 全局替换
c 确认,如果加上 c 选项,每次都需要确认 confirm
p 逐行显示结果

省略 option 时只对每一行的第一个匹配串进行替换
删除所有空行
:g/^$/d

删除所有空白行和空行
:g/^[ ][ ]*$/d

在每行开始插入两个空白
:%s/^/ /

在接下来5行末尾加入"

:.,5/$/"/

多窗口操作
新建与关闭窗口
在 Normal 模式下使用以下命令新建窗口
:split 水平分割窗口,内容一样:10split 水平分割窗口,新窗口高度10行:split filename 窗口中打开新文件:new 功能和split一样:sp split 缩写Ctrl-w s,v 分割窗口的快捷方式,s水平分割,v垂直分割:vsplit 垂直分割窗口,简写 :vsCtrl-w c 关闭当前窗口

窗口间移动
Ctrl-w h,j,k,l Ctrl按下,按下w 松开,Ctrl松开,按hjkl 对应左下上右

移动窗口
Ctrl-w H,J,K,L 大写HJKL,移动窗口

窗口最大化
Ctrl-w o 让当前文件占据整个窗口

调整窗口大小
Ctrl-w < > 调整窗口宽度,<缩小当前窗口宽度,向左扩展一列,>增加当前窗口宽度,向右扩展一列。当然 Ctrl-w 之后可以使用 n+< 调整多列宽度 Ctrl-w - + 调整窗口高度
Tabs
Tab is different from the windows in vim. If your fimiliar with Firefox or Chrome, you can understand that a new tab contains a new website. While in vim, a tab can contain several windows and you can move the windows between tabs.
Create New tab
There are lots of ways to create a new tab, here I only intruduce some common commands.
:tabnew create a empty new tab:tabedit {file} edit specified file in new tab

Manage tabs
Some ways to close tabs:
:tabclose close current tab:tabclose {i} close i-th tab:tabonly close all other tabs

Some ways to move tabs:
:tabm 0 move current tab to first:tabm move current tab to last:tabm {i} move current tab to position i+1:tabs list all tabs including their opening windows

Ways to move between tabs:
:tabn go to next tab:tabp go to previous tab:tabfirst go to first tab:tablast go to last tab

While in normal mode, you can type:
gt go to next tabgT go to previous tab{i}gt go to tab in position i

更正
Insert模式下
<BS> 退格键,删除光标前<Del> Delete键,删除光标后<C-W> 删除一个单词<C-U> 删除光标前的字符,保留光标之后的文本,保留行首的缩进,只删除第一个非空字符至光标位置之间的文本。

可视Visual mode
v 按字符选择,在Normal mode下按下v进入Visual modeV 按行选择Ctrl+Q 块选择,Windows下,其他平台下Ctrl+V

选择字符之后操作
d 剪切选择内容到剪贴板y 拷贝选择内容到剪贴板c 剪贴选择内容到剪贴板并进入Insert mode

命令模式
:! command 暂时离开 vi 到命令模式下执行 command

Other
:verbose set tabstop? in Vim, it will tell you where the tapstop option value is coming from:help + command 查看Vim命令的帮助,比如想要查看 c 命令的帮助直接使用 :h c 就能查到。g <C-g> 单词统计

差不多看到这里就能够直接看文档了:http://vimcdoc.sourceforge.net/ 通过文档学习更多符合自己使用习惯的命令或者操作。
reference
http://vim.wikia.com/wiki/Search_and_replace

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 按功能划分出命令 光标移动 w移动光标到下一个单词的词首,b移动光标到上一个单词的词首;e移动光标到下一个单词的结...
    清水芦苇阅读 601评论 0 0
  • 概念 什么是 vim Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富...
    静默虚空阅读 628评论 0 3
  • vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v 从...
    壹首簡單的歌阅读 880评论 0 7
  • 1. vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下:v ...
    路痴千行阅读 3,263评论 0 0
  • 我想,我是中了毒!听多了民谣还是喝了毒鸡汤?民谣如诗,而远方大概就是西北的样子吧。青海,让人魂牵梦绕的地方...
    一路向阳2021阅读 1,169评论 0 1