• 请不要在回答技术问题时复制粘贴 AI 生成的内容
miaoxia
V2EX  ›  程序员

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

  •  
  •   miaoxia · Feb 20, 2017 · 7018 views
    This topic created in 3542 days ago, the information mentioned may be changed or developed.

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

    例如下面的代码:

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

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

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

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

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

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

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

    现在连手机输入法都是直接出一对啦……
    rrfeng
    rrfeng
    Feb 20, 2017
    16
    不应该是各语言的自动 snippet 插件搞定吗?
    DiamondbacK
    DiamondbacK
    Feb 20, 2017
    17
    我自己没什么需求,全是手动打括号。
    ```
    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
    loryyang
    Feb 20, 2017
    18
    “从开始写代码的时候,老师就教如果写括号,要先写括号,再写括号里面的内容”
    这个是怕你写错括号的匹配吗?感觉意义不大,我都是分开打的。一般括号里面的内容不多,都不会漏的。万一真漏了,编译( cpp )或者运行( python )时都会提醒的
    不过你那样写也没问题,并不是很麻烦
    DiamondbacK
    DiamondbacK
    Feb 20, 2017
    19
    typo:
    call feedkeys('a', a:char, 'n')
    correct:
    call feedkeys('a'. a:char, 'n')
    TJT
    TJT
    Feb 20, 2017
    21
    @loryyang 你可以试一下去写 Lisp :D
    chemzqm
    chemzqm
    Feb 20, 2017
    22
    Erskine
    Erskine
    Feb 20, 2017
    23
    同问
    noclyt
    noclyt
    Feb 20, 2017
    24
    天哪, VIM 打个括号竟然这么麻烦! Emacs 围观 ing
    ywt474000158
    ywt474000158
    Feb 20, 2017
    25
    习惯之后感觉会记得没闭合的括号吧, 难道是我写的都太简单了...
    pysama
    pysama
    Feb 21, 2017
    26
    自动补全配置,输入左括号自动补全后括号,并进入 insert 模式

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

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

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

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

    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
    waruqi
    Feb 21, 2017
    32
    写个括号。没必要整的这么复杂吧。。直接顺序手打 ( . ) 下就行了。。
    JamesRuan
    JamesRuan
    Feb 21, 2017
    33
    谁让你们一开始就把括号闭起来的啦,最后闭合一点问题都没有。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1375 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 140ms · UTC 22:09 · PVG 06:09 · LAX 14:09 · JFK 17:09
    ♥ Do have faith in what you're doing.