jeesk
V2EX  ›  Vim

vim 如何实现快速插入换行?

  •  
  •   jeesk · Mar 14, 2023 · 5299 views
    This topic created in 1331 days ago, the information mentioned may be changed or developed.
    1. 比如我写下 fun do(){}, 这个时候我光标在{cursor} 处于普通模式, 我要如何快的实现?

    fun do(){

    cursor } 这种效果呢? 问了 chatgpt ,方案好像没有没有效果。 麻烦大佬指点一下。

    18 replies  •  2023-03-15 21:00:39 +08:00
    DTCPSS
    DTCPSS
    Mar 14, 2023
    1
    o
    DTCPSS
    DTCPSS
    Mar 14, 2023
    2
    抱歉,看错了
    TK4E
    TK4E
    Mar 14, 2023
    3
    设置下快捷键就好了呀 大概这样
    map('n', 'N', 'i<CR>')
    EyebrowsWhite
    EyebrowsWhite
    Mar 14, 2023
    4
    neovim 我用这个插件,https://github.com/windwp/nvim-autopairs ,vim 应该也有类似的,你可以找找
    nightwitch
    nightwitch
    Mar 14, 2023 via Android
    5
    i ,回车
    Mbb38C3HtyZydTt7
    Mbb38C3HtyZydTt7
    Mar 14, 2023
    6
    好问题,我之前在使用 helix 的时候也遇到了这个问题。解决方法就是定位到 `{` 或 `}`,然后在 `a` 或者 `i` 吧,这样肯定不能说是快速。可能 vim 会有专用的快捷键。如果经常使用的话, 建议按照上面的设置快捷键。
    wizardyhnr
    wizardyhnr
    Mar 14, 2023
    7
    最近在搞 Python 语法输入写 Rust 。
    你这个可以加大概如下到 vimrc ,记忆不一定准确,就是把你的输入按键映射到:<CR>
    inoremap :<CR> {}<ESC>hi<CR>
    DrakeXiang
    DrakeXiang
    Mar 15, 2023
    8
    我觉得这种不算是痛点,空闲又好用的键去绑定个组合的话浪费了,如果多个键去组合实现的话实际上还是按了多次键,感觉没有质的提升,要实在受不了那就直接用 snippet 插件,我的话手动回车,或者直接开始写,一行写完保存的时候自动格式化
    jeesk
    jeesk
    OP
    Mar 15, 2023
    9
    参考前面大佬们的回复:
    map <F5> i<CR><CR><ESC><CAPS>o

    {cursor} 当光标在花括号里面的时候,首先执行插入模式,然后执行 2 次换行,在退出。这个时候我想执行 shift + o, 向上换行? shift +o ,如何放到 map 映射里面?
    povvoq
    povvoq
    Mar 15, 2023
    10
    我会绑定普通模式下,0 是行首,9 是行尾
    所以我的操作是 esc (如有必要),9 ,i ,enter
    kite12580
    kite12580
    Mar 15, 2023
    11
    @jeesk nnoremap <F5> i<CR><CR><ESC>O
    shxxy
    shxxy
    Mar 15, 2023 via Android
    12
    有空格就放空格上面 r<CR>
    没空格就只能老老实实 i<CR><ESC>
    hxy100
    hxy100
    Mar 15, 2023
    13
    尝试在 ~/.vimrc 中加入以下代码,实现单、双引号自动补齐,小括号、大括号、中括号自动补全
    ------

    " 括号自动补全
    inoremap ( ()<Esc>i
    inoremap [ []<Esc>i
    inoremap { {<CR>}<Esc>O
    autocmd Syntax html,vim inoremap < <lt>><Esc>i| inoremap > <c-r>=ClosePair('>')<CR>
    inoremap ) <c-r>=ClosePair(')')<CR>
    inoremap ] <c-r>=ClosePair(']')<CR>
    inoremap } <c-r>=CloseBracket()<CR>
    inoremap " <c-r>=QuoteDelim('"')<CR>
    inoremap ' <c-r>=QuoteDelim("'")<CR>


    function ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
    return "\<Right>"
    else
    return a:char
    endif
    endf


    function CloseBracket()
    if match(getline(line('.') + 1), '\s*}') < 0
    return "\<CR>}"
    else
    return "\<Esc>j0f}a"
    endif
    endf


    function QuoteDelim(char)
    let line = getline('.')
    let col = col('.')
    if line[col - 2] == "\\"
    "Inserting a quoted quotation mark into the string
    return a:char
    elseif line[col - 1] == a:char
    "Escaping out of the string
    return "\<Right>"
    else
    "Starting a string
    return a:char.a:char."\<Esc>i"
    endif
    endf
    andy2415
    andy2415
    Mar 15, 2023
    14
    @jeesk #9 直接大写 O 就可以了
    jiekeop
    jiekeop
    Mar 15, 2023
    15
    @hxy100 是不是贴错了一些,我放进去输入一个" 提示报错
    =QuoteDelim('"')
    Error detected while processing function QuoteDelim:
    line 3:
    E114: Missing quote: "\"
    Press ENTER or type command to continue
    zhuisui
    zhuisui
    Mar 15, 2023
    16
    我的快捷键 `nnoremap <Leader>o o<ESC>`
    不论是在哪个字符位置, 直接下面起一行
    hxy100
    hxy100
    Mar 15, 2023
    17
    @jiekeop 确实少了一行,在最上面加上下面这行即可:

    set nocompatible

    --------
    另:github gist 我也传了一份,现在已测试过单独加载这个.vimrc 配置文件没问题
    https://gist.github.com/hexiyou/fef4060308a7f7ad3f04d10c9f392e5f
    timothyye
    timothyye
    Mar 15, 2023
    18
    大写 O 就行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1771 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 17:23 · PVG 01:23 · LAX 09:23 · JFK 12:23
    ♥ Do have faith in what you're doing.