扩展html标记后的Vim光标位置
I大多数IDE和现代文本编辑器(升华文本3)在html标记之间插入换行符(也称为“扩展”标记)后,光标正确缩进: 之前:扩展html标记后的Vim光标位置,vim,indentation,Vim,Indentation,I大多数IDE和现代文本编辑器(升华文本3)在html标记之间插入换行符(也称为“扩展”标记)后,光标正确缩进: 之前: <div>|</div> | 按下CR键后: <div> | </div> | 但在Vim中,我得到的是: <div> |</div> | 我怎样才能在Vim中获得与大多数其他编辑器(见上文)相同的行为?@RandyMorris和@Romaill已经为您的确切问题发布了很好的解决方
<div>|</div>
|
按下CR键后:
<div>
|
</div>
|
但在Vim中,我得到的是:
<div>
|</div>
|
我怎样才能在Vim中获得与大多数其他编辑器(见上文)相同的行为?@RandyMorris和@Romaill已经为您的确切问题发布了很好的解决方案 如果您自己输入这些标记,您可能会对其他一些可能性感兴趣:有一个用于HTML/XML编辑的插件 使用ragtag.vim,您可以键入以下内容来创建“之前”的情况(在插入模式下):
div
要创建“之后”情况,您可以键入:
div<C-X><Enter>
div
因此,如果您事先知道要“展开”标记,只需键入元素名称和组合CtrlX,然后输入Enter就足够了
还有其他更高级的插件可以在编辑HTML时保存击键,例如and。在插入模式下,
唯一正确的行为是在光标处断行
你想要的是一个增强的行为,你需要在你的配置中添加一些东西来获得它:一个映射、一个短函数或一个成熟的插件
当我开始使用vim时,这种行为实际上是我添加到vimrc中的第一件事。我在过去多次更改过它,但这种映射已经相当稳定了一段时间:
inoremap <leader><CR> <CR><C-o>==<C-o>O
inoremap==O
我使用了
来保持
的正常行为
下面是一个小函数,它似乎可以实现您想要的功能:
function! Expander()
let line = getline(".")
let col = col(".")
let first = line[col-2]
let second = line[col-1]
let third = line[col]
if first ==# ">"
if second ==# "<" && third ==# "/"
return "\<CR>\<C-o>==\<C-o>O"
else
return "\<CR>"
endif
else
return "\<CR>"
endif
endfunction
inoremap <expr> <CR> Expander()
function!Expander()
let line=getline(“.”)
设col=col(“.”)
let first=行[col-2]
设第二个=行[col-1]
让第三个=行[列]
如果第一个=#“>”
如果second=#“这个小片段将在插入模式下重新映射Enter,以测试光标是否在
和
之间,如果在插入模式下,则执行相应的操作。根据缩进设置,可能需要删除代码\选项卡/代码。/p
pIt将不会/em与其他可能也映射kbdEnter/kbd密钥的插件配合使用,因此请注意,如果您想要实现兼容性,可能还有更多工作要做。/p
预失效EnterOrIndentTag()
let line=getline(“.”)
设col=getpos(“.”[2]
let before=第[col-2]行
let after=行[col-1]
如果之前==“”&之后==“”
返回“\Enter\C-oO\Tab”
恩迪夫
返回“\Enter”
端功能
inoremap expr输入EnterOrIndentTag()
/编码/预编码
pI只测试了简单的情况(行首、行尾、代码内部和外部>,因为没有人提到过,我会的。有一个优秀的插件可以做到这一点
试试这个:由于某些原因,我在这里回答这个问题时遇到困难(提交问题时不断出错)。我已经粘贴了我想要的答案。@RandyMorris我没有问题将其作为答案发布。再次尝试发布吗?@FDinoff没有骰子。感谢您尝试,我猜我的计算机或我的帐户上出现了故障。@FDinoff一定是我的工作机器。它在我的手机上工作。再次感谢您。兰迪。您的解决方案非常有用不错,但事实上我需要一些能与其他插件(如matchIt)配合使用的东西。你的代码让我开始考虑编写这样一个函数,谢谢!谢谢!不幸的是,这对我不起作用,尽管我已经安装了ragtag插件,并且经常使用它插入ruby标记(所以我知道它是有效的)非常感谢。你的解决方案起作用了,我会接受它作为答案。我宁愿看到一种更为自动化的行为,就像我在崇高的文本或文本中得到的那样。我可能会研究学习VimScript和扩展Randy Morris解决方案。FWIW,我使用SnpPad和SpkUp编写HTML。你应该考虑那些插件:这会帮你节省很多打字时间。非常感谢。你太棒了!
function! Expander()
let line = getline(".")
let col = col(".")
let first = line[col-2]
let second = line[col-1]
let third = line[col]
if first ==# ">"
if second ==# "<" && third ==# "/"
return "\<CR>\<C-o>==\<C-o>O"
else
return "\<CR>"
endif
else
return "\<CR>"
endif
endfunction
inoremap <expr> <CR> Expander()
function EnterOrIndentTag()
let line = getline(".")
let col = getpos(".")[2]
let before = line[col-2]
let after = line[col-1]
if before == ">" && after == "<"
return "\<Enter>\<C-o>O\<Tab>"
endif
return "\<Enter>"
endfunction
inoremap <expr> <Enter> EnterOrIndentTag()