gpt4 book ai didi

VIM 删除 X 括号之间

转载 作者:行者123 更新时间:2023-12-02 15:36:56 24 4
gpt4 key购买 nike

我正在尝试在 VIM 中映射 Ctrl-y 以删除它在光标下匹配的括号之间找到的内容。它有效,但它也删除了括号。这是我目前正在使用的:

imap <c-y> <Esc><Right>d%<Insert>

这很好用,除了我说的它也删除了光标下的内容(即匹配的括号)。我确实找到了这个:

diX

X是您正在寻找的支架; [ , ( , '

i 的问题命令是我不想为我定期执行此操作的每个括号映射一个新键,我喜欢 %因为它匹配光标下的任何字母 s甚至。

有什么方法可以让它保留括号?

编辑:抱歉,举个例子。我有以下文本示例,(* 代表光标):

(*text to be erased between brackets)
"*text to be erased between brackets"
'*text to be erased between brackets'
[*text to be erased between brackets]
{*text to be erased between brackets}

基本上,在每个示例中,我都希望我的光标位于相关括号的顶部,然后当我点击 Ctrl-y 时它从插入模式移动到正常模式,删除 ALL 文本或光标下方括号之间的任何内容(自从我移动到正常模式然后 <Right> )到下一个相同的支架。

所以上面的所有这些都会变成:

()
""
''
[]
{}

不移除周围的括号。与 d%括号被删除。

最佳答案

不,%只匹配一对的另一半和字母字符,如 s不要成对出现:您只能使用 (){}[]''""<> .

此外,编辑是在正常 模式下完成的,而不是插入 模式。

在正常模式下,一种可能的顺序是 v%holc :

" []: normal mode cursor, |: insert mode cursor

[(]foo bar baz)
[(foo bar baz)]
[(foo bar baz])
([foo bar baz])
(|)

所以下面的映射应该能满足你的需求:

nnoremap <C-y> v%holc

扩展此映射以使其适用于任何 字符将不那么琐碎。

我应该补充一点 ci(和 friend 并不像你想象的那么累。

编辑

下面的函数(和关联的普通模式映射)不是很聪明,但完全按照你的要求做;随意修改它。它是这样工作的:

  • 如果您点击 <C-y>({[< ,当前字符与其兄弟 (>]})) 之间的文本被删除,您将进入插入模式。

  • 如果您点击 <C-y>在任何其他字符上,当前字符和该行下一个字符之间的文本将被删除,您将进入插入模式。

函数:

function! InPair()

let l:this_char = getline('.')[col('.')-1]

if this_char == '{' || this_char == '(' || this_char == '[' || this_char == '<'
execute "normal! di" . this_char
else
execute "normal! ldt" . this_char
endif

startinsert

endfunction

映射:

nnoremap <C-y> :call InPair()<CR>

它绝不是完美的,但它应该提供一个良好的起点。

关于VIM 删除 X 括号之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15693152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com