大家好我只需要一个快速修复,如果可以:使用Vim,我需要我的花括号在键入开始括号时自动关闭。我<authentication mode="Forms" />
<authorization>
<allow users="*" />
</authorization>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
</system.webServer>
工作正常。但是,如果没有必要,我需要禁用它。所以我在想一个简单的if语句,寻找一个')'因为前一个字符就足够了。但是,我不知道我应该怎么做。有什么帮助吗?
答案 0 :(得分:2)
这可以通过调用自定义函数来完成。
:help getline()
:
getline({lnum} [,{end}])
如果没有{end},结果是一个String,它是当前缓冲区中的行{lnum}。当{lnum}是不以数字开头的String时,调用line()将String转换为数字。获取光标下的行:getline(“。”)
:help col()
:
COL({expr}的)
结果是一个Number,它是{expr}给出的列位置的字节索引。
所以你可以通过getline('.')[col('.') - 2]
将光标放在光标前面。
:help feedkeys()
:
feedkeys({string} [,{mode}])
{string}中的字符排队等待处理,好像它们来自映射或由用户键入。默认情况下,字符串被添加到预先输入缓冲区的末尾,因此如果仍在执行映射,则字符将在它们之后。
要在{string}中包含特殊键,请使用双引号和“...”表示法expr-quote。例如,feedkeys(“\&lt; CR&gt;”)模拟按下&lt; Enter&gt;。键。但是feedkeys('\&lt; CR&gt;')会推送5个字符。
如果缺少{mode},则会重新映射密钥。 {mode}是一个String,它可以包含这些字符标志:
'm' Remap keys. This is default. 'n' Do not remap keys.
:help i_CTRL-O
,:help i_CTRL-\_CTRL-O
:
CTRL-O execute one command, return to Insert mode i_CTRL-O
CTRL-\ CTRL-O like CTRL-O but don't move the cursor i_CTRL-\_CTRL-O
首先,ko
可以缩减为单个命令O
。
function! s:InsertBrace()
let l:last_char = getline('.')[col('.') - 2]
if l:last_char ==# ')'
call feedkeys("{\<CR>}\<Esc>O", 'n')
else
call feedkeys('{', 'n')
endif
endfunction
inoremap { <C-\><C-O>:call <SID>InsertBrace()<CR>
每当我们按 {时,我们都会调用s:InsertBrace()
。该函数检查当前光标下的字符。如果是)
,那么我们插入{<CR>}<Esc>O
,注意转义。否则,我们只需插入单个{
。
答案 1 :(得分:1)
答案 2 :(得分:1)
这可能不是您正在寻找的。但不是编写函数,而是编写复杂的vimrc。我使用的一种更简单但有点有用的方法
每当您不想要映射时,使用 Ctrl + v 转义映射