VIM常见用法总结

欢迎和大家交流技术相关问题:

邮箱: [email protected]

博客园地址: http://www.cnblogs.com/jiangxinnju

GitHub地址: https://github.com/jiangxincode

知乎地址: https://www.zhihu.com/people/jiangxinnju

vim中光标如何回到上一次位置

ctrl + o

vim如何删除某行至某行之间的内容?

删除3104至5403行之间的内容:

:3104,5403d

vim使光标始终在屏幕中央

  • zz是卷页面使光标到中间
  • M是移动光标到中间
  • :set scrolloff=10 可以让光标一直在中间,调整数的大小可以控制区域

vim的列编辑操作

  • 删除列:光标定位到要操作的地方。CTRL+v 进入“可视 块”模式,选取这一列操作多少行。d 删除。
  • 插入列:例如我们在每一行前都插入"() ":光标定位到要操作的地方。CTRL+v 进入“可视块”模式,选取这一列操作多少行。SHIFT+i(I) 输入要插入的内容。ESC 按两次,会在每行的选定的区域出现插入的内容。

利用vim查询函数用法

当光标处在函数名称时:按K即可进入函数说明(相当于man),也可以使用nK制定man的级别

vim跨文件复制

打开一个文件,在该文件下复制几行到另一个文件(如到test.txt),会覆盖目标中的内容

10,100w!test.txt

在该文件下复制几行到另一个文件,但不会覆盖原内容,即追加

10,100w!>>test.txt

在一个文件中复制几行到缓冲区

"anyy

在另一个文件中粘贴

"ap

解决往vim里粘贴格式散乱的问题

有时候从编辑器里面复制粘贴代码到vim中,代码格式会完全乱套。其原因是vim开启了smartindent(智能缩减)或autoindent(自动对齐)模式。为了保持代码的格式,在粘贴前可以先停止上面的两种模式,命令为:

:set nosmartindent
:set noautoindent

为了一个粘贴搞出这么多事来,确实是麻烦。不过还有一个更加简单的方法,用命令开始粘贴模式,即:

:set paste

由于粘贴模式和上面的smartindent、autoindent模式是互斥的,而smartindent是不可少的,所以粘贴完后使用下面的两条命令之一来关闭粘贴模式。

:set nopaste
:set paste!

另外还可以通过绑定自定义快捷键的方式来快速切换,例如将下面配置加入到.vimrc中

方式1:

set pastetoggle=<F4>

方式2:

:map <F8> :set paste
:map <F9> :set nopaste

注意:方式1在阅读和编辑模式下都可以使用,对粘贴模式开启和关闭进行切换;方式2是在阅读模式下使用,按下相应的快捷键就相当于执行后面定义的命令。

解决在insert模式下面backspace键无法删除的问题

vim 在插入模式下

:set backspace=indent,eol,start

或者:

set nocompatible

vim 替换

    :0,$s/^/#/gc " 在行首加一个#号
    :6,10s/^/#/gc " 在6~10行的行首加一个#号
    :%s/^ *//g " 删除行首的空格
    :%s/ *$//g " 删除行尾的空格
    :%s/^\n//g " 删除空行
    :g/^s*$/d " 删除空行

Vim局部排序

如果我们想以第4列数据进行排序,可以在vim中如此做:

1,12!sort -r -n -k4.1,5

-r 降序排序
-n 按数字大小排序
-k,表示根据那个字段排序,4.1,表示第4列第一个字符开始 ,5表示到第5个字段为结束
-t 后面跟分隔符,缺省是空格

在VIM里面, 如果你要把从当前行以下20行按字母顺序排序

.,+20!sort

同时打开、显示多个文件

vim还没有启动的时候:在终端里输入

vim file1 file2 ... filen

vim已经启动,输入

:open file

同时显示多个文件:

:split
:vsplit

文件间切换,对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。

Ctrl+6—下一个文件
:bn—下一个文件
:bp—上一个文件

在窗格间切换的方法

Ctrl+w+方向键——切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向后切换到下一个窗格中

用vim修改文件编码为utf-8

网页常常会出现乱码的情况,一般都是编码设置不对造成的。例如一个网页源文件的编码不是utf8的,但声明为utf8<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />网页就会出现乱码。可以用vim修改源文件编码为utf8,命令是

:set fileencoding=utf-8

如果用vim打开文件时里面有乱码,可能用上面的命令修改文件后无法保存。可以用其他软件打开文件,然后把内容拷贝到vim里再保存就行了。

gvim编码配置

Vim/Gvim 在中文 Windows 下的字符编码有两个问题:

  • 默认没有编码检测功能
  • 如果一个文件本身采用的字符集比 GBK 大(如 UTF-8、UTF-16、GB18030),那么其中无法在 GBK 中对应的字符都会出现乱码,保存时会丢失。即使编辑文件时正确检测出文件格式也无济于事。

第一个问题的解决办法是在 ~/.vimrc 中加入以下配置:

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

第二个问题的解决办法是强制要求 Vim 的内部编码采用某种 UTF 编码。比如 UTF-8:

set encoding=utf-8

但是,把 Vim 的内部编码设为 UTF-8 会带来以下新问题

  • 使用非 GUI 界面的 vim 时会乱码
  • 提示信息(比如E492: 不是编辑器的命令: foo)会乱码

要解决非 GUI 界面的 vim 的乱码问题,需要设置终端编码为系统默认编码:

set termencoding=cp936

而要让提示信息不乱码则要需要使用 UTF-8 版本的提示信息:

language messages zh_CN.UTF-8

综上所述,在中文 Windows 下正确配置字符编码,需要把以下内容加入你的 ~/.vimrc 中

    set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
    set encoding=utf-8
    set termencoding=cp936
    language messages zh_CN.UTF-8

What is the

:help leader

ctags的安装

ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。比如,tags文件就是Taglist和OmniCppComplete工作的基础。

sudo apt-get install ctags

在程序的根目录下运行ctags -R,生成tags文件,然后在编辑程序时按Ctrl+]就会跳转到当前光标所在东西的定义处。若有多个tag,执行:ts,进行选择。按Ctrl+o即可跳回。不过,当修改过代码后,需要重新生成tags。

VIM重新载入文件

有时候要使用VIM打开了一些文件,但是在其他地方把次文件改动了,例如使用git进行checkout等操作,需要重新载入此文件。

1 重新载入当前文件:

    :e
    :e! #放弃当前修改,强制重新载入

2 重新载入所有打开的文件:

:bufdo e 或者 :bufdo :e!
:bufdo命令表示把后面的命令应用到所有buffer中的文件。

大小写转换

  vim中大小写转化的命令是:gu或者gU,形象一点的解释就是小u意味着转为小写,大U意味着转为大写。接下来说明对这两个命令的限定(限定操作的行,字母,单词)等等。

整篇文章大小写转换

打开文件后,无须进入命令行模式。键入

:ggguG/:gggUG

解释一下:ggguG分作三段gg gu(U) G

  • gg=光标到文件第一个字符
  • gu(U)=把选定范围全部小(大)写
  • G=到文件结束
  • guw 、gue、gUw、gUe 只转化某个单词,光标后面的单词便会进行大小写转换
  • gu5w、gu5e、gU5w、gU5e 转换5个单词
  • 1gU 从光标所在行往下一行都进行小写到大写的转换
  • 10gU 则进行11行小写到大写的转换
  • gU0 从光标所在位置到行首,都变为大写
  • gU$ 从光标所在位置到行尾,都变为大写
  • gUG 从光标所在位置到文章最后一个字符,都变为大写
  • gU1G 从光标所在位置到文章第一个字符,都变为大写

vim脚本

map
re: reduce 被映射的序列被递归映射
i: insert
n: normal
no: no

vim7.4的python相关配置

这里只讨论官方提供的windows版本的安装文件对python的支持配置,至于自己编译vim的情况,一般都很清楚python如何配置了,不在此讨论。官方提供的gvim安装文件默认是支持python和python3两种模式的,编译时带有该选项,但并没有附带对应的运行库和运行环境.所以在本地没有安装python时直接在vim中执行

:py echo "ABCDE"

会提示无法加载python27.dll, 针对于这种情况,请到官方下载 windows 版本的 32位 的python 2.7.x 安装文件. 使用64位的python无法正常在gvim中使用。python3.x系列在某些vim相关插件中仍不支持,所以依旧推荐使用2.7.x

用vim格式化代码

在vim的官方FAQ (http://vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl)找到的

格式化全文: gg=G

自动缩进当前行: ==

这个是原文节选:

14.6. How do I format/indent an entire file?

You can format/indent an entire file using the gg=G command, where

 gg - Goto the beginning of the file
 =   - apply indentation
 G   - till end of file

For more information, read

 :help gg
 :help =
 :help G
 :help ‘formatprg‘
 :help C-indenting

VIM 编辑二进制文件 (vim手册载录)

帮助文档:23.4

vim 将文件所有行合并到一行

在 Normal Mode下执行:

ggvGJ

gg 用于跳到行首

v 转换成 visual 模式

G 跳到最后一行

J 合并行

VIM 如何查看动态增长的log文件

:set autoread

原文地址:https://www.cnblogs.com/jiangxinnju/p/8146715.html

时间: 2024-10-07 19:17:08

VIM常见用法总结的相关文章

IOS中NSString的常见用法

iOS NSString的常用用法 //1.创建常量字符串. NSString *astring = @"This is a String!"; //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; //3.在以上方法中,提升速度:initWithString方法 NSString *astring = [[NSString allo

python之模块pprint之常见用法

# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块pprint之常见用法 import pprint data = [(1,{'a':'A','b':'B','c':'C','d':'D'}),(2,{'e':'E','f':'F','g':'G','h':'H','i':'I','j':'J','k':'K','l':'L'}),] print '--'*30 #1.打印效果 pprint.pprint (data) ''' ----

.NET中Path类的一些常见用法

.NET为处理文件路径提供了一个Path类,利用该类可以方便的处理文件路径,如更改文件后缀,合并文件路径,改变文件的扩展名等.有一点需要注意的是,Path类本质上是对一个字符串进行处理,更改的只是该字符串,而不会影响实际的文件.下面是该类的一些常见用法示例: 1 string filePath = @"C:\D\log\Receive\postedFile.txt"; 2 int padSpacesLength = 30; 3 string newFilePath = string.E

sscanf的常见用法

例子: 1. 常见用法. char buf[512] = ; sscanf("123456 ", "%s", buf); printf("%s\n", buf); 结果为:123456 2. 取指定长度的字符串.如在下例中,取最大长度为4字节的字符串. sscanf("123456 ", "%4s", buf); printf("%s\n", buf); 结果为:1234 3. 取到指定

正则表达式介绍及常见用法

正则表达式(Regular Expression),又称正规表示法.常规表示法,在实际的软件开发项目中经常会被使用到.它使用单个字符串来描述.匹配并获取一系列符合某个句法规则的结果. 我将从最基础的部分为大家写这个正则表达式教程. 正则表达式起源   1956年,数学家Stephen Kleene在Warren McCulloch和Walter Pitts早期神经系统工作的基础上,设计出了一个数学符号体系--regular sets(规则的集合),这个东西很快被计算机科学家用于编译器的扫描或词法

python之模块poplib之常见用法

# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块poplib之常见用法 ''' 所以,收取邮件分两步: 第一步:用poplib把邮件的原始文本下载到本地: 第二部:用email解析原始文本,还原为邮件对象. poplib.POP3(host,port,timeout):连接pop3服务器 poplib.POP3_SSL(): POP3.set_debuglevel(level):设置调试模式,可以看到与服务器的交互信息 POP3.ge

【ORM】关于Dapper的一些常见用法

引言 Dapper是.Net平台下一款小巧玲珑的开源Orm框架,简单实用的同时保持高性能,非常适合我这种喜欢手写SQL的人使用,下面介绍一下如何使用Dapper. 相关资料 Dapper的GitHub地址是dapper-dot-net,上面有一些用法和性能的介绍,有兴趣者可以上去看看. 数据库设计和实体类     简单设计两个表,分别为部门表,雇员表. CREATE TABLE [dbo].[T_Dept] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Dept]

IOS中NSSData常见用法

一.NSdata的概念 1.使用文件时需要频繁地将数据读入一个临时存储区,它通常称为缓冲区 2.NSdata类提供了一种简单的方式,它用来设置缓冲区,将文件的内容读入缓冲区,或者将缓冲区内容写到一个文件. 3.对于32位应用程序,NSdata缓存最多2GB 4.我们有两种定义 NSData(不可变缓冲区),NSMutableData(可变缓冲区) NSData *fileData; NSFileManager *fileManager = [[NSFileManager alloc]init];

IOS中NSNumber常见用法

一.NSnumber常见用法 NSNumber + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithDouble:(double)value; - (int)intValue; - (double)doubleValue; -(float)floatValue; 二.使用 NSNumber * intNumber=[NSNumber numberWithInt:100]: NSNumber *floatNumber=[N