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

2023-03-14 20:31:56 +08:00
 jeesk
  1. 比如我写下 fun do(){}, 这个时候我光标在{cursor} 处于普通模式, 我要如何快的实现?

fun do(){

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

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

{cursor} 当光标在花括号里面的时候,首先执行插入模式,然后执行 2 次换行,在退出。这个时候我想执行 shift + o, 向上换行? shift +o ,如何放到 map 映射里面?
pkokp8
2023-03-15 02:49:24 +08:00
我会绑定普通模式下,0 是行首,9 是行尾
所以我的操作是 esc (如有必要),9 ,i ,enter
kite12580
2023-03-15 03:24:35 +08:00
@jeesk nnoremap <F5> i<CR><CR><ESC>O
qwq11
2023-03-15 05:51:49 +08:00
有空格就放空格上面 r<CR>
没空格就只能老老实实 i<CR><ESC>
hxy100
2023-03-15 08:04:46 +08:00
尝试在 ~/.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
2023-03-15 09:32:07 +08:00
@jeesk #9 直接大写 O 就可以了
jiekeop
2023-03-15 11:02:12 +08:00
@hxy100 是不是贴错了一些,我放进去输入一个" 提示报错
=QuoteDelim('"')
Error detected while processing function QuoteDelim:
line 3:
E114: Missing quote: "\"
Press ENTER or type command to continue
zhuisui
2023-03-15 11:41:28 +08:00
我的快捷键 `nnoremap <Leader>o o<ESC>`
不论是在哪个字符位置, 直接下面起一行
hxy100
2023-03-15 12:46:04 +08:00
@jiekeop 确实少了一行,在最上面加上下面这行即可:

set nocompatible

--------
另:github gist 我也传了一份,现在已测试过单独加载这个.vimrc 配置文件没问题
https://gist.github.com/hexiyou/fef4060308a7f7ad3f04d10c9f392e5f
timothyye
2023-03-15 21:00:39 +08:00
大写 O 就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/924002

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX