枫叶居

桃李春风一杯酒,江湖夜雨十年灯

0%

Vim实用技巧

介绍

转载说明:本文章为作者原创,转载请标注原文地址

本人是一个vim党,平时的开发工作都是在vim下完成的,但是…vim的官方手册就达2000多页,所以本人将平时遇到的一些比较有趣的插件与配置记录在配置文件中,一是方便他人借阅,分享一些实用的技巧,另一方面也是自我的慢慢积累。

实用技巧

1.显示代码中的Tab字符

Python2.7版本,代码缩进是不允许空格与制表符Tab混合使用的,否则会抛出IndentationError异常,这困扰过很多初学者,明明看着缩进都对,但是就是报错。

  • 使用正则表达式替换
  • 开启list选项,查看Tab字符与空格,:set list。
1
2
set lcs=tab:>-,trail:-
map <silent> <C-l> :let &list=&list==1?0:1<CR> "也可通过:set list显示

2.在代码中插入表达式值

在开发工作中,经常需要输入一些常量值,因为数值比较大,不太容易计算的原因,很多同学直接输入了常量表达式。比如,存在时间戳t = int(time.time()),现在需要获取该时间戳24小时前的时间戳,可以这样写:

1
_t = int(time.time()) - 24 * 3600

对于Python这种解释性语言来说,这种开销就落到了运行时,所以在vim中插入表达式值这个技巧显得比较实用。
在插入模式下(注意是插入模式),按下,然后键入=,=后面输入需要计算的表达式,摁下Enter便可以计算出该表达式的值。

3.未配置插件,注释代码块

有时候需要在服务器上修改一些配置,或者脚本,而服务器的vim未配置,没有代码注释插件,该怎么达到目的呢?这时,可以按下进入列选择模式,选中需要注释代码的前几列,可通过o或O调整选择块的范围,然后按下I,输入注释符,Python中为’#’,然后按下,便可大功告成(注意:按下A则在块后面添加)。

4.快速关闭文件

大多数同学退出vim,都是在命令行下输入,:wq,退出,因为键位的缘故,个人感觉这样不是很方便,好在vim提供了更加便捷的方式。
关闭文件时,只需在普通模式下,输入ZZ,(即左侧shift+z,z按下两次),效果等同于:x命令,文件内容有改动,保存修改并退出,更改文件修改时间,如果文件未有改动则退出,不更改文件修改时间。

想要丢弃对文件的更改,大多数同学都是用,:q!,强制退出的。在vim中也可以在普通模式下输入ZQ,强制退出。

5.强制保存文件

注意:此用法需要当前用户,在sudoer文件中授权。

在工作中经常遇到,root用户的vim未进行任何配置,而用普通用户去编辑的时候,保存却没有权限的尴尬。下面的vim命令可以,调用sudo进行修改保存,非常实用。

1
:w !sudo tee %

6.快速选择代码段落

常见选择方式:v - 选择字符,V - 行选择, - 列选择。

大多数同学,进行多行代码选择时会用V开启行选择,然后通过j,k,o选择,代码块,或者是g跳转等,这样子虽然速度不慢,但是还是不够优雅。

vim中有个段落的概念(paragraphs),大家可以通过:tab help paragraphs,查看paragraphs的描述,或者该博客
在开发工作中,我习惯将不同小功能,用空格划分为不同段落(Python开发中,这也是Pep8建议的),然后用段落移动命令,在段落间移动,用vip命令选择整个段落,很方便。

命令 效果
]] foo
[[ bar
) 向前移动一条一语句(forward)
( 向后移动一条语句(backward)
{ 向前移动至下一段落
} 向后移动至下一段落
vap 选择一个段落
vip 选择一个段落

7.设置vim分词

在vim中,用w,b,e,ge,等可以在单词之前移动,这种移动方式,大大方便了我们的编程,但是也有一些不尽如人意的地方,比如,下面的函数foo,有a,b,c三个参数,想要把光标从a移动至b,则需要输入2w,(vim将逗号,作为一个单词),这样子不是很方便(用习惯的同学除外),vim有个iskeyword选项,定义了“单词”的组成字符,可以将“,”,“.”,做为单词的一部分,下次移动的时候直接按下w便可从参数a,移动至参数b。(个人习惯,不喜勿喷^_^)

1
2
3
4
5
6
7
def foo(a, b, c):
pass

class Demo(object):
pass
d = Demo()
d.__name__
1
2
:set iskeyword+=\,
:set iskeyword+=\.

1
:set iskeyword+=\,\.
坚持原创技术分享,您的支持将鼓励我继续创作!