Coffeescript 在vim中映射shift键
在VIM中映射Shift键时出现问题。我希望Ctrl+L的行为与Ctrl+Shift+L不同 所以我有这个Coffeescript 在vim中映射shift键,coffeescript,vim,Coffeescript,Vim,在VIM中映射Shift键时出现问题。我希望Ctrl+L的行为与Ctrl+Shift+L不同 所以我有这个 " for insert mode remap <c-l> to: " Insert a hash rocket for ruby " Insert a -> for php " for coffee the shift key decides function! SmartHash(...) let shift = a:0
" for insert mode remap <c-l> to:
" Insert a hash rocket for ruby
" Insert a -> for php
" for coffee the shift key decides
function! SmartHash(...)
let shift = a:0 > 0
let ruby = &ft == 'ruby'
let php = &ft == 'php'
let coffee = &ft == 'coffee'
if php
return "\->"
end
if coffee
return shift ? "\ =>\n" : "\ ->\n"
end
if ruby
return "\ => "
end
return ""
endfunction
imap <c-l> <c-r>=SmartHash()<cr>
imap <C-S-L> <c-r>=SmartHash(1)<cr>
插入模式重新映射到的“”:
“为ruby插入一个哈希火箭
“为php插入->命令
“咖啡由换档键决定
功能!SmartHash(…)
设shift=a:0>0
让ruby=&ft=='ruby'
让php=&ft=='php'
让咖啡=&ft=‘咖啡’
如果php
返回“\->”
结束
如果咖啡
换班?\=>\n:“\->\n”
结束
如果红宝石
返回“\=>”
结束
返回“”
端功能
imap=SmartHash()
imap=SmartHash(1)
…但它只是触发第二个映射,无论我是否按下Shift键
更新基于
插入模式重新映射到的“”:
“为ruby插入一个哈希火箭
“插入一个->用于php和coffeescript
“双击不会为php和coffescript替换符号
功能!SmartHash(…)
设alt=a:0>0
让ruby=&ft=='ruby'
让php=&ft=='php'
让咖啡=&ft=‘咖啡’
如果php | |咖啡
返回alt?\=>\n:“\->\n”
结束
如果红宝石
返回“\=>”
结束
返回“”
端功能
imap=SmartHash()
imap=SmartHash(1)
由于键盘输入是在内部处理的,不幸的是,这在今天是不可能的,即使在GVIM中也是如此。这是一个已知的痛点,也是关于vim_dev和#vim IRC通道的各种讨论的主题
一些人(最重要的是Paul LeoNerd Evans)希望解决这一问题(即使是支持这一点的终端中的console Vim),并提出了各种建议,cp
但到今天为止,还没有补丁或志愿者出现,尽管许多人表示希望在未来的Vim8主要版本中有这样的补丁或志愿者
我通常通过使用
g
启动备用映射来解决此问题,例如
和g
,但这在插入模式下不起作用。在您的情况下,使用一点额外的逻辑,您可以在相同的位置进行第二次
,将先前插入的->
更改为=>
,这样您就可以通过
获得第一个备选方案,如果您使用基于终端的vim
,则通过获得第二个备选方案,c-l
和c-s-l
之间没有区别。GUI(gvim
)可以映射这些键。这太棒了。它比我原来拥有的功能更广泛。
" for insert mode remap <c-l> to:
" Insert a hash rocket for ruby
" Insert a -> for php and coffeescript
" double tapping does alternate symbol for php and coffescript
function! SmartHash(...)
let alt = a:0 > 0
let ruby = &ft == 'ruby'
let php = &ft == 'php'
let coffee = &ft == 'coffee'
if php || coffee
return alt ? "\ =>\n" : "\ ->\n"
end
if ruby
return "\ => "
end
return ""
endfunction
imap <c-l> <c-r>=SmartHash()<cr>
imap <c-l><c-l> <c-r>=SmartHash(1)<cr>