快速使用vim格式化代码


在vim的编辑模式i下直接ESC退出道命令模式之后直接敲入如下命令:

gg=G        将全部代码格式化

nG=mG    将第n行到第m行的代码格式化

:如果ESC之后输入的是 :gg=G前面加了个分号‘:’那么就会有不是编辑器命令的提示。

快速说明


格式化全文指令 gg=G

自动缩进当前行指令 ==

格式化当前光标接下来的8行 8=

格式化选定的行 v 选中需要格式化的代码段 =

备注:

gg   —— 到达文件最开始

=    —— 要求缩进

G     —— 直到文件尾

注释代码:(这个原理上就是使用VIM的正则替换)


以C++和Python为例。 
注释连续行: 
指令格式 :起始行,终止行s/要替换的字符/替换为字符/g 
如, 
      C++源文件中注释掉10~20行,指令为: 
:10,20s/^/////g
Python源文件中注释掉10~20行,指令为: 
:10,20s/^/#/g
取消连续行注释: 
指令格式同上。只是要替换字符与替换为字符要互换: 
如, 
      取消C++源文件中的10~20行的注释,指令为: 
:10,20s/^//////g
取消Python源文件中的10~20行的注释,指令为: 
:10,20s/^#//g

详细说明


先看一段简单的tutorial。

Fix Indentation and Tabs in VIM

Thanks to the folks in #vim on freenode, here's a quick tutorial on how to fix the indentation and tabs in an xml file from within VIM…
First find out what your current settings are by typing:
:filetype

Should return something like “filetype detection:ON plugin:OFF indent:OFF”
1) :set filetype=xml
2) :filetype indent on
3) :e
4) gg=G

Basically what this is doing is setting the filetype to xml (so it can pickup the XML indenting rules (see :e $VIMRUNTIME/indent for a list of available languages )
Then turn on indent, then reload it (:e).
The last step is ‘gg=G '  which will acutally retab the entire file (gg is line 1, and G is last line ).
You can find more info by reading vim help files:

:he gg
:he =
:he G
:he :filetype

Note: Most commands in vim are run with by typing “:command , you can find help by typing “:help command ” or simply “:he cmd ”. HOWEVER, the main command to retab “gg=G” is NOT preceeded by a “:” .

看完这段tutorial,我们遇到的问题基本就解决了。

Vim格式化代码功能——gg=G

常用的几个功能:

(1) gg=G 是一个自动缩进的命令 (在命令状态下直接输入,不需要输入冒号),gg是文件首,G是文件尾,所以 gg=G 是整理全部代码。
(2) == 整理当行,加行数整理多行。
(3) ={ 或者 =i{ 整理一个代码块。
(4) mG=nG 当 m 不等于 n 的时候能完成从 m 行到 n 行的局部的缩进。例如,从80行缩进直到100行,你可以用 80G=100G,在命令状态下使用 :set nu 查看行号,一般更习惯将 se nu 直接写入Vim的配置文件,这样每次打开都会显示行号。
(5) 在写代码前,设置自己的代码风格。在配置文件里添加命令:
" 设置缩进和行号
set nu ru ai si ts=4 sw=4
(6) :set equalprg=indent
意思是用indent程序处理等号命令,indent默认是gnu风格。
建议不要改,代码风格应该自己主动养成,=适用于修改代码或者粘贴别处代码后整理缩进。
这里又体现出不用indent的好处了,如果用indent,单纯格式化代码块会丢统一的行首缩进,而且选中的如果不是内部完整的代码块,会出错,把出错的输出贴到了代码里....弊端很多。

1.12. 定宽文本排版

在传统的 Unix 环境下,文本文件的定义是具有一定长度限制的文本行的组合 [19]。虽然 Vim 本身对行的长度没有任何实际的限制,但有一些工具有这样的限制。为了最大程度的兼容性,也为了在显示、打印等处理上比较方便,一般推荐在邮件和源代码中一 般不要超出 72 列(最多不超出 80 列)。Vim 在处理定宽的文本方面具有特殊的支持能力。下面是一个在 Vim 中把行宽(使用选项 textwidth)设为 40 后输入 Harry Potter and the Half-Blood Prince 的第一句话的结果:

It was nearing midnight and the Prime Minister was sitting alone in his office, reading a long memo that was slipping through his brain without leaving the slightest trace of meaning behind.

输入时我只使用了英文字母和空格,换行符都是 Vim 自动插入的。如果在某一行加入或删除了一些字符后行不就不齐了吗,该如何处理?很简单,把光标移到要重新格式化的文本开头,使用“gq”命令后面跟一个光 标移动命令确定重新格式化的范围。比如“gq}”(格式化一段),“gq5j”(格式化 5 行),“gqG”(格式化至文件末尾)。

除了选项 textwidth 外,选项 formatoptions 确定了跟文本格式化有关的基本选项,常用的数值有:

·         t:根据 textwidth 自动折行;

·         c:在(程序源代码中的)注释中自动折行,插入合适的注释起始字符;

·         r:插入模式下在注释中键入回车时,插入合适的注释起始字符;

·         q:允许使用“gq”命令对注释进行格式化;

·         n:识别编号列表,编号行的下一行的缩进由数字后的空白决定(与“2”冲突,需要“autoindent”);

·         2:使用一段的第二行的缩进来格式化文本;

·         l:在当前行长度超过 textwidth 时,不自动重新格式化;

·         m:在多字节字符处可以折行,对中文特别有效(否则只在空白字符处折行);

·         M:在拼接两行时(重新格式化,或者是手工使用“J”命令),如果前一行的结尾或后一行的开头是多字节字符,则不插入空格,非常适合中文

上面提到的注释,可以是 C/C++ 中的“//”和“/*”,也可以是邮件中引用原文使用的“>”等字符(具体由 comments 选项控制;参见“:help 'comments'”)。Vim 在遇到这些字符时,能够相当智能地进行处理,足以完成日常编辑源代码和邮件的需要。在使用一些处理纯文本不够强大的邮件客户端时,我通常使用 Vim 编辑邮件(特别是英文邮件),然后把结果贴回到邮件编辑窗口中进行发送。

Vim 中 formatoptions 的缺省值是“tcq”,一般我会在 .vimrc 文件中加入一行“set formatoptions+=mM”来确保 Vim 能在中文字符之间折行而不要求空格的存在,并且在大部分情况下可以正确地处理中文重新格式化。

[VIM] 格式化代码的更多相关文章

  1. vim格式化代码实际上就是 "缩进代码", 命令是等号=

    vim格式化代码实际上就是 "缩进代码", 命令是等号= 格式化就是 vim 根据 文件的类型, 自动的对代码进行 缩进 缩进的类型有多种, 都是用等号命令: = 全部格式化 : ...

  2. VIM格式化代码(How to format code with VIM)

    1) 按两下小写g,即gg,定位光标到第一行.(2) 按住Shift+v,即大写V,进入可视化编辑的列编辑模式.(3) Shift+g,即大写G,选中整个代码.(4) 按下等号=,格式化所有代码.

  3. vim格式化代码

    在命令模式下,按键盘gg=G 命令含义: gg:到达文件头=:缩进G:直到文件尾

  4. vim 添加php自动补全 并格式化代码

    自动补全,修改/etc/vimrc的配置 vim /etc/vimrc 添加: filetype plugin on autocmd FileType php set omnifunc=phpcomp ...

  5. go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带

    3.3 调试器 应用程序的开发过程中调试是必不可少的一个环节,因此有一个好的调试器是非常重要的,可惜的是,Go 在这方面的发展还不是很完善.目前可用的调试器是 gdb,最新版均以内置在集成开发环境 L ...

  6. vim php代码规范

    vim 代码规范工具php-cs-fixer.phar (參考https://github.com/FriendsOfPHP/PHP-CS-Fixer) INSTALL curl http://get ...

  7. phpstorm 无法格式化代码

    phpstorm 默认的格式化代码的快捷键是 Ctrl + Alt + L,但是按了没有反应. 原因是当时开着网易云音乐,占用了这个快捷键,关了就好了.另外其他的程序比如QQ也有可能占用这个快捷键.

  8. Eclipse保存文件时自动格式化代码

    实现效果:Ctrl+S会自动格式化并保存代码. 应用上图所示效果之后,在每次对Eclipse保存的时候都会实现自动格式化代码. 1. Fomated All lines,格式化该文件的所有代码:还是 ...

  9. vim黏贴代码格式混乱的解决方法

    from:http://blog.csdn.net/commshare/article/details/6215088 感谢牛人的文章.解决了我在vim使用中,很头疼的问题. 在vim新建文件的时候, ...

随机推荐

  1. Cocos2d入门--2--三角函数的应用

    其实,三角函数的知识点是初中的数学基础.但是在编程里合理的利用的话,也会很好玩的,可以制作出很多有趣的动画特效. 首先要注意的是 角度 和 弧度 的转换. 360度 = 2×PI弧度 180度 =   ...

  2. 通过设置虚拟机(ubantu15.10)的分辨率达到全屏效果

    最近搭建了一个ubantu 15.10虚拟机,怎么折腾都不能全屏显示.虽然我已经点了,  还是无法达到真正的全屏. 查了一下,http://jingyan.baidu.com/article/0964 ...

  3. javascript 全局变量 局部变量 var 与不加var的区别

      一.外部的为全局,内部的为局部变量.   二.加var为局部变量(在方法内),不加var为全局变量(当方法内有一次使用后) <script type="text/javascrip ...

  4. 远程连接mysql容易遇到的2个问题

    1."com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The las ...

  5. Effective Java 72 Don't depend on the thread scheduler

    Principle Any program that relies on the thread scheduler for correctness or performance is likely t ...

  6. 烂泥:KVM中安装Windows Server 2008 R2系统

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在前一篇文章中,我介绍了有关在KVM中的安装Centos系统.接下来,就来介绍如何在KVM中安装Windows系统. 注意:在此我安装的是windows ...

  7. 常用的Linux可插拔认证模块(PAM)应用举例(一)

    pam_access.so模块 pam_access.so模块主要的功能和作用是根据主机名(包括普通主机名或者FQDN).IP地址和用户实现全面的访问控制.pam_access.so模块的具体工作行为 ...

  8. python module getopt usage

    import getopt import sys def usage(): print 'this is a usage.' def main(): try: print sys.argv #sys. ...

  9. linux内核宏container_of前期准备之gcc扩展关键字typeof

    typeof基本介绍 typeof(x) 这是它的使用方法,x可以是数据类型或者表达式.它的作用时期和sizeof类似,就是它是在编译器从高级语言(如C语言)翻译成汇编语言时起作用,这个很重要,稍后会 ...

  10. mysql创建表

    说明:此文件包含了blog数据库中建立所有的表的Mysql语句. 在sql语句中注意“约束的概念": 1.实体完整性约束(主键--唯一且非空) primary key() 违约处理:No a ...