每日vi tips

reference : http://liuzhijun.iteye.com/blog/1827901

day 1

.vimrc

对vi控制的一些命令可以放到一个.vimrc的文件里,保存下次打开vi会直接生效,不用每次手工输入命令。.vimrc这个隐藏文件一般放在~目录中。
我目前配置的.vimrc如下:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set nonu
set smartindent
set cindent

visual block

  1. 光标定位到代码块的行首,Ctrl+v进入Visual-block模式
  2. 光标向下移动,直到选择所有代码行的第0列
  3. 输入I(光标前插入字符),此时你会发现光标跳到了代码块的开头处,此时已经是insert 模式了,现在就插入python的注释字符’#’
  4. 按Esc键,此时你会发现代码块所选区域都打上了注释符号#

day 2

移动

× 翻页

CTRL+f:向下翻一页
CTRL+b:向上翻一页
CTRL+d:向下翻半页
CTRL+u:向上翻半页

× 光标定位

w/W:移动到下一个单词的起始处
b/B:移动到前一个单词的起始处
0:移动到行首
$:移动到行未
^:移动到当前行的第一个非空字符处(如果该行首没有空格,那么效果与0是一样的)
G:移动到最后一行
nG:移动到第n行

× 插入,追加字符

i:在当前光标位置插入字符
o/O:在当前行往下/上插入新的一空行
a:在当前光标后追加字符
r/R:替换当前光标的字符
:r filename:把文件名为filename的内容插入当当前行的下一行
:r! command:把command返回的结果插入到当前行的下一行

× 拷贝与粘贴

yw:拷贝当前的一个单词
y0:拷贝的范围是当前光标处到行首
y$:拷贝的范围是当前光标处到行尾
yy:拷贝当前行
nyy:从当前行开始拷贝n行(这里的n是数字)

按p粘贴

× 删除

x:删除当前光标处字符
dw:删除当前光标出一个单词
d0:删除光标处到行首的字符
d$:删除光标处到行尾的字符
dd:删除整行
ndd:删除n行(同样n代表数字) 

day 3

  • 简单配置

    :set filetype=python   #设置默认语言
    :set tabstop=4   #设置tab默认为4个空格
    :set nu     #vim窗口左侧显示行号
    :set nonu   #不显示行号
    
  • 撤销与恢复

    撤销操作:normal模式下按u
    恢复操作:normal模式下按ctrl+r
    
  • 简单搜索

    /string #往下查找string
    ?string #往上查找string
    × #查找光标下的单词(全局查找)
    :set hlsearch #查找串高亮显示
    :set hls      #查找串高亮显示
    n       #下一个查找到的串
    %       #匹配当前行的括号
    :set ignorecase   #忽略大小写
    

day 4

  • 替换的基本语法是

    :[addr]s/源字符串/目的字符串/[option]
    

× [addr]代表检索范围,缺省表示当前行,1,10表示1到10行,%代表整个文件等价于1, ., 代表当前行到文件末尾
× s代表替换的意思
× option代表操作类型,缺省只对第一个匹配的字符进行替换,g代表全局替换,c代表操作时确认,gc可以组合使用

  • 几个例子:

    × :s/aa/bb/g      
     将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
    × :%s/aa/bb/g     
     将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    × :12,23s/aa/bb/g  
    将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    × :%s/^/#/         
    全文的行首加入 # 字符,批量注释的时候非常有用
    × :%s/ *$/        
    将所有行尾多余的空格删除
    
    × :g/^$/d          
    
    这里的g表示对文章中所有符合要求字符串执行替换操作,^表示行首,$表示行尾,整个意思是:将所有的空行删除.
    
  • 多文件编辑

    启动vim时,可以同时打开多个文件:vim a.py b.py c.py,窗口会显示一个文件,如果想切换到b.py文件,可以用命令:next,前提是当前的这个文件需要先保存,你也可以用:next强制切换到b.py,放弃当前的保存工作。向前切换使用:previous,规则与next一样。

    :args:查看vim打开了哪些文件,当前编辑的是哪个文件。打开另一组文件列表::args a.java b.java c.java,因为这些文件都是在同一个session中,所以,从a文件中yy(yank复制)一行p(paste)到b文件是没问题的。

day 5

自动补全

ctrl + n :输入一个字母后按这个组合键就列出补全列表,接着在按一次这个组合键选择列表
ctrl + p :跟上面的命令作用一样

上面两个命令是单词补全,下面这个命令会整行补全
ctrl + x, ctrl + l :先按ctrl + x进入选择补全项,如果按ctrl + n表示选择单词补全,跟上面介绍的直接按ctrl + n功能一样的。如果按ctrl + l表示行补全。

day 6

缩进

normal 模式下:

>>  当前行增加缩进
<<  当前行减少缩进

insert模式下:

CTRL+SHIFT+T:当前行增加缩进
CTRL+SHIFT+D:当前行减少缩进  
默认vim的缩进宽度为8个空格,修改缩进的宽度::set shiftwidth=4,具体什么意思,看下面的详细解释。

与缩进相关的参数有shiftwidth、tabstop、softtabstop、expandtab。

shiftwidth  reindent 操作(<<和>>)时缩进的列数(这里的一列相当于一个空格)
tabstop     一个tab键所占的列数,linux 内核代码建议每个tab占用8列
softtabstop 敲入tab键时实际占有的列数。
expandtab   输入tab时自动将其转化为空格

day 7

多窗口

vim -o file1 file2打开两个窗口分别显示fiel1和file2
vim -o3 file1 file2 file3打开三个窗口
:sp file新开一个窗口并打开file,sp是splite的简写

day 8

手工折叠代码快

zf  创建折叠(fold creation)
zo  打开折叠(open)
zc  再次折叠起来(close)

例子

v{motion}zf  折叠V模式下选中的文本。(这里的v{motion}指的是Shift+v)。
zf\`a    折叠当前光标处到标记a处的文本 (`ma`就表示在当前光标出做a标记)      
zf3j     折叠当前光标出下3行
zf10G    从当前行折叠至第20行
zfgg     折叠至行首
zf%      光标移至'{'时,vim会去匹配'}',这样'{}'之间的内容就可以折叠起来

day 9

这篇跟vim没有什么关系,是一些linux命令行的快捷键,在网上无意间看到的。刚好最近对这几个快捷键有需求,所以记录下来。

有时候输入的命令行非常长,移动光标就非常麻烦,还好有快捷键帮忙。先面这些快捷键都是在输入命令行情景下使用的。

CTRL + U - 剪切光标前的内容
CTRL + K - 剪切光标至行末的内容
CTRL + Y - 粘贴
CTRL + E - 移动光标到行末
CTRL + A - 移动光标到行首
ALT + F - 跳向下一个空格
ALT + B - 跳回上一个空格
ALT + Backspace - 删除前一个单词
CTRL + W - 剪切光标前一个单词
Shift + Insert - 向终端内粘贴文本

有这么一个情景:vi编辑的时候,突然想看看当前目录下有那些文件,是不是需要图推出当前vi,在命令行下执行ls再回到vi呢?
不需要这么麻烦的,使用下面这两个命令就行了;

CTRL + Z - 暂停应用程序
fg - 重新将程序唤到前台
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值