Vim 写 C++,如何在输完分号; 后自动格式化当前行的代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RicardoM
V2EX    Vim

Vim 写 C++,如何在输完分号; 后自动格式化当前行的代码

  •  
  •   RicardoM 2016-11-22 10:09:58 +08:00 5345 次点击
    这是一个创建于 3253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近开始在 Linux 下写一些小程序,代码格式化用的是 clang-format ,但必须手动选择区域然后格式化,用起来总有点不爽,自己加空格又太麻烦。
    所以想问一下,怎么才能像 visual studio 一样,在输完分号 ; 或者右括号 ) 后自动的格式化当前行的代码。

    /div>
    23 条回复    2016-12-19 23:58:10 +08:00
    araraloren
        1
    araraloren  
       2016-11-22 10:18:39 +08:00
    ~~可能需要一些配置吧,个人不是很清楚,我觉得 emacs 比较好用~~
    当然,图形界面还是用 qtcreator
    skydiver
        2
    skydiver  
       2016-11-22 11:00:49 +08:00 via Android
    可以设置保存时自动格式化
    RicardoM
        3
    RicardoM  
    OP
       2016-11-22 11:12:19 +08:00
    @araraloren 现在主要是在刷一些算法和数据结构方面的题,感觉 Vim 刚好够用,所以想把 Vim 配置的顺手一点。至于 emacs 暂时不敢开坑了。
    RicardoM
        4
    RicardoM  
    OP
       2016-11-22 11:21:11 +08:00
    @skydiver 我是想能够在输完每一条语句后,就立即自动格式化当前语句。设置保存时自动格式化,还是得隔一会儿手动操作一下,感觉还是不太方便。
    phoneli
        5
    phoneli  
       2016-11-22 11:39:08 +08:00
    我会写。有时间可以交流一下。哈哈
    skydiver
        6
    skydiver  
       2016-11-22 11:42:50 +08:00
    @RicardoM 没必要那么强迫症吧
    RicardoM
        7
    RicardoM  
    OP
       2016-11-22 11:49:48 +08:00
    @skydiver 我也觉得自己有点强迫症,但是 windows 下 visual studio 用多了, vim 不能自动格式化当前行,心里总有点不爽。
    skydiver
        8
    skydiver  
       2016-11-22 11:59:50 +08:00
    @RicardoM 真的强迫症的话应该自己就把代码格式写对。我的代码拿格式化工具处理之后大部分的地方都不会变,因为本来就写的没问题。
    yangtukun1412
        9
    yangtukun1412  
       2016-11-22 12:19:14 +08:00   1
    简单试了下:
    inoremap ; ;<ESC>Vgq==A
    RicardoM
        10
    RicardoM  
    OP
       2016-11-22 12:20:27 +08:00 via Android
    @skydiver 代码格式基本没问题,就是表达式中变量、数值和函数之间的空格,自己手动加的话,少的还行,多的就不太方便了
    RicardoM
        11
    RicardoM  
    OP
       2016-11-22 12:21:51 +08:00 via Android
    @phoneli 是通过插件,还是 Vim 的 imap 命令?
    psklf
        12
    psklf  
       2016-11-22 12:41:26 +08:00
    @RicardoM 你这要求就不适合用 vim

    要不然试试 code blocks
    iCyMind
        13
    iCyMind  
       2016-11-22 12:54:57 +08:00 via Android
    什么叫格式化当前语句?写的时候难道不是自动缩进吗
    RicardoM
        14
    RicardoM  
    OP
       2016-11-22 13:21:53 +08:00 via Android
    @iCyMind 缩进是自动的,我的意思是:假如当前行是 `int i=0` ,我输完分号后变为 `int i = 0;`
    itroom
        15
    introom  
       2016-11-22 13:24:24 +08:00 via Android
    @RicardoM 刷题为什么不直接网页呢?
    RicardoM
        16
    RicardoM  
    OP
       2016-11-22 14:23:24 +08:00 via Android
    @introom 刷题可以在那几个网站上写,但还是不能解决这个代码格式化的问题吧,网站上只是能自动缩进
    phoneli
        17
    phoneli  
       2016-11-22 14:57:08 +08:00
    @RicardoM 准确来说,插件其实就是一段代码。代码里面可以用 imap ,也可以不用的。我记得, vim 好像有一个监听事件的。输入回车,触发一个函数的。:)
    chemzqm
        18
    chemzqm  
       2016-11-22 15:22:18 +08:00
    :h gq
    :h equalprg
    newtype0092
        19
    newtype0092  
       2016-11-22 15:56:19 +08:00   1
    我觉得中间的空格手动加。我一直这么写,没觉得不方便,因为空格这东西一天两天你还要想,时间长了完全就是本能了,你想想你用中文输入的时候是不是要刻意记得按空格选词。
    而且你这么配置好,习惯了以后,不管是换编辑器、换 IDE 还是换语言,都会增加障碍。
    ruoxuanfeng
        20
    ruoxuanfeng  
       2016-11-22 17:20:17 +08:00   1
    最近在尝试 astyle ,有 vim 插件,支持自动格式化, lz 可以试试
    skywind3000
        21
    skywind3000  
       2016-11-23 19:50:09 +08:00
    现在的同学们写点代码依赖自动化到这种地步了么?以前 DOS 下敲代码时,有个 autoindent 就算不错了。
    RicardoM
        22
    RicardoM  
    OP
       2016-11-23 20:03:39 +08:00
    @skywind3000 被 visual studio 惯坏了
    xiaohanqing
        23
    xiaohanqing  
       2016-12-19 23:58:10 +08:00 via Android   1
    :help cinkeys
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2658 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 03:29 PVG 11:29 LAX 20:29 JFK 23:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86