Vim 党 书写括号的正确方式是什么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
miaoxia
V2EX    程序员

Vim 党 书写括号的正确方式是什么

  •  
  •   miaoxia 2017-02-20 16:23:24 +08:00 5987 次点击
    这是一个创建于 3159 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从开始写代码的时候,老师就教如果写括号,要先写括号,再写括号里面的内容

    例如下面的代码:

    • while((i >> 1) > 0)

    普通的 text 的书写顺序是:(<-代表左箭头,->代表右箭头)

    • while()<-()<-i >> 1-> > 0

    在 Vim 的书写顺序是什么呢? 这是我的写法 感觉好复杂- -

    • while()Esci()Escii >> 1Esclli > 0
    33 条回复    2017-02-21 20:05:53 +08:00
    xss
        1
    xss  
       2017-02-20 16:51:25 +08:00
    少年, 你需要插件 surround.vim
    passion336699
        2
    passion336699  
       2017-02-20 16:59:21 +08:00
    while
    左手小拇指按住 shift ,打();
    左手无名指按 ESC ,右手中指按 I ,打()里面的代码;
    ()里条件打完,同操作按 ESC ,左手小拇指按住 shift ,同时左手中指按$,同操作按 I ,再进行其他输入。。
    这个指法如何 @_@
    daviswei
        3
    daviswei  
       2017-02-20 16:59:26 +08:00
    别扮酷用 hjkl 来移动光标嘛。。。有专门的上下左右撒
    lululau
        4
    lululau  
       2017-02-20 17:02:29 +08:00
    少年, 你需要插件 unimpaired.vim
    xss
        5
    xss  
       2017-02-20 17:03:30 +08:00
    @daviswei 专门的上下左右实在是鸡肋...hjkl 可以手指不用离开基础键就搞定移动. 否则手来回移来移去浪费时间.
    lzhCoooder
        6
    lzhCoooder  
       2017-02-20 17:14:51 +08:00
    这种插件很多,我觉得你那样也不是很别扭比去按上下左右好多了
    ltux
        7
    ltux  
       2017-02-20 17:15:36 +08:00
    Tiande
        8
    Tiande  
    PRO
       2017-02-20 17:21:33 +08:00   1
    善用各种 map 即可。

    譬如下面这个 map ,
    当你处于 i 模式输入 $t ,会插入书名号 <> ,且光标会移动到 <> 中间。(不需要 Esc 后调整光标位置)
    当你处于 v 模式输入 $t ,会用书名号 <> 立即包裹你选中的部分。
    ```
    vnoremap $t <esc>`>a><esc>`<i<<esc>
    inoremap $t <><esc>i
    ```

    括号同理。
    kongse
        9
    kongse  
       2017-02-20 17:40:49 +08:00
    可以用 Autokey 自己编一个, WIn + 1 插入一对括号, Win + 2 插入两个括号, WIn + Shift + 1 插入<>等,插入后自动移动到中间位置。编好了每个编辑器都能通用。
    majixian621
        10
    majixian621  
       2017-02-20 18:28:39 +08:00
    配置自己的代码习惯吧, vim 里面默认$是行尾,但是$的位置确实有点尴尬,我自己就配置了两个快捷键, le,跳至行尾, lb 跳至行首,同时还可配置文本首尾的跳,还是比较方便的。 vimrc 如下,多练习就好了,我一直觉得码字的速度不是影响写代码的啊。。。。
    nmap lb ^
    nmap le $
    nmap lt H
    nmap ln L
    nmap lm M
    wudanyang
        11
    wudanyang  
       2017-02-20 18:43:04 +08:00
    while () <c-[>isomething<c-[>Asomthing
    woohaha
        12
    woohaha  
       2017-02-20 18:48:47 +08:00
    先装 surround.vim,再定义^l 为右键
    TerrenceSun
        13
    TerrenceSun  
       2017-02-20 19:31:49 +08:00
    可以试试 ctrl+o ,临时进可视模式
    binux
        14
    binux  
       2017-02-20 19:38:04 +08:00
    对的,我就是用那种最复杂的方式写括号,然后 ESC 移动再插入的。
    插件帮我闭合了我还不习惯!
    loading
        15
    loading  
       2017-02-20 19:38:38 +08:00 via Android
    难道不是按 (,然后直接出 (光标)

    现在连手机输入法都是直接出一对啦……
    rrfeng
        16
    rrfeng  
       2017-02-20 19:53:20 +08:00
    不应该是各语言的自动 snippet 插件搞定吗?
    DiamondbacK
        17
    DiamondbacK  
       2017-02-20 20:39:31 +08:00
    我自己没什么需求,全是手动打括号。
    ```
    inoremap jk <Esc>
    inoremap <Esc> <Nop>
    ```
    while ()jki<code-in>jkla<code-after>


    已经够简单了。如果非要搞一个 mapping 来省这么一点点力气,我这儿有个土法炮制刚出炉的:
    ```
    inoremap ( (<Esc>:call AutoParen(nr2char(getchar()))<CR>
    function! AutoParen(char)
    call feedkeys('a', a:char, 'n')
    if a:char != ')'
    call feedkeys(")\<Esc>i", 'n')
    endif
    endfunction
    ```

    这要智能一些,将连续输入 '()' 作为例外处理了。
    while (<code-in>jkla<code-after>
    少打 ')jki' 几个字。
    loryyang
        18
    loryyang  
       2017-02-20 20:46:46 +08:00
    “从开始写代码的时候,老师就教如果写括号,要先写括号,再写括号里面的内容”
    这个是怕你写错括号的匹配吗?感觉意义不大,我都是分开打的。一般括号里面的内容不多,都不会漏的。万一真漏了,编译( cpp )或者运行( python )时都会提醒的
    不过你那样写也没问题,并不是很麻烦
    DiamondbacK
        19
    DiamondbacK  
       2017-02-20 20:46:51 +08:00
    typo:
    call feedkeys('a', a:char, 'n')
    correct:
    call feedkeys('a'. a:char, 'n')
    klesh
        20
    klesh  
       2017-02-20 20:55:32 +08:00
    TJT
        21
    TJT  
       2017-02-20 21:09:10 +08:00
    @loryyang 你可以试一下去写 Lisp :D
    chemzqm
        22
    chemzqm  
       2017-02-20 21:50:00 +08:00
    iRiven
        23
    iRiven  
       2017-02-20 22:06:28 +08:00
    同问
    noclyt
        24
    noclyt  
       2017-02-20 23:21:58 +08:00
    天哪, VIM 打个括号竟然这么麻烦! Emacs 围观 ing
    ywt474000158
        25
    ywt474000158  
       2017-02-20 23:29:19 +08:00
    习惯之后感觉会记得没闭合的括号吧, 难道是我写的都太简单了...
    pysama
        26
    pysama  
       2017-02-21 00:24:57 +08:00
    自动补全配置,输入左括号自动补全后括号,并进入 insert 模式

    " 括号自动补全
    func! AutoClose()
    :inoremap ( ()<ESC>i
    :inoremap " ""<ESC>i
    :inoremap ' ''<ESC>i
    :inoremap { {}<ESC>i
    :inoremap [ []<ESC>i
    endf

    不谢~
    pysama
        27
    pysama  
       2017-02-21 00:26:29 +08:00
    哦,还得补上这个执行语句:
    ```
    au FileType php,c,python,Javascript,html,css exe AutoClose()
    ```
    Immortal
        28
    Immortal  
       2017-02-21 09:18:59 +08:00
    已经脱离纯 vim 了
    一直是 idea+vim 插件的方案
    idea 下的 vim 操作还是相对接近原生 也有自己的可配置文件
    又能使用 idea 这类 ide 带来的便利
    nG29DOMuRYTWfcSr
        29
    nG29DOMuRYTWfcSr  
       2017-02-21 13:22:40 +08:00 via Android
    何不尝试 SpaceVim.
    SpaceVim 主页 https://spacevim.org
    SpaceVim 文档 https://spacevim.org/documentation

    当然你也可以看这篇博客,如何打造一个 Java IDE

    http://spacevim.org/use-vim-as-a-java-ide/
    flniu
        30
    flniu  
       2017-02-21 13:25:15 +08:00
    在 Vim 下一直习惯先打开括号、打完内容、再打闭括号。`set showmatch` 之后,漏打多打闭括号都不太可能。
    autoclose 类的插件没有用过。如果能做到 idea 系的效果也是不错的:输入开括号时自动在光标后添加闭括号,若手工再输入闭括号则自动覆盖(相当于向右移动光标)。这样在关注括号里内容时可以省略输入闭括号,在需要输入括号后内容时可以最大限度避免思路中断。
    iEverX
        31
    iEverX  
       2017-02-21 17:23:37 +08:00
    忘了从哪个博客里看到的,用的挺顺手的

    inoremap ( ()<esc>i
    inoremap ) <c-r>=ClosePair(')')<cr>
    inoremap [ []<esc>i
    inoremap ] <c-r>=ClosePair(']')<cr>
    inoremap { {}<esc>i
    inoremap } <c-r>=ClosePair('}')<cr>
    inoremap (<cr> (<cr>)<esc>O
    inoremap [<cr> [<cr>]<esc>O
    inoremap {<cr> {<cr>}<esc>O

    function! ClosePair(char)
    if getline('.')[col('.')-1] == a:char
    return "\<Right>"
    else
    return a:char
    endif
    endfunction
    waruqi
        32
    waruqi  
       2017-02-21 18:21:37 +08:00
    写个括号。没必要整的这么复杂吧。。直接顺序手打 ( . ) 下就行了。。
    JamesRuan
        33
    JamesRuan  
       2017-02-21 20:05:53 +08:00
    谁让你们一开始就把括号闭起来的啦,最后闭合一点问题都没有。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1003 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:31 PVG 02:31 LAX 11:31 JFK 14:31
    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