我是一个狂热的vim用户,最近开始编写一些SQL代码。我喜欢在CAPS中编写我的SQL语句,有时忘记切换 大写锁定 'off'然后我很快就会对我的代码造成严重破坏,然后才意识到发生了什么。
我到目前为止还没有找到任何方法来判断是否 大写锁定 关键不仅仅是看我的键盘(这要求我远离屏幕,我认为这是一个很大的延迟)。
理想情况下,我希望vim自动更改我的背景颜色 大写锁定 是'开'但我愿意接受一些其他的屏幕指示 大写锁定 作为妥协的地位。
我是一个狂热的vim用户,最近开始编写一些SQL代码。我喜欢在CAPS中编写我的SQL语句,有时忘记切换 大写锁定 'off'然后我很快就会对我的代码造成严重破坏,然后才意识到发生了什么。
我到目前为止还没有找到任何方法来判断是否 大写锁定 关键不仅仅是看我的键盘(这要求我远离屏幕,我认为这是一个很大的延迟)。
理想情况下,我希望vim自动更改我的背景颜色 大写锁定 是'开'但我愿意接受一些其他的屏幕指示 大写锁定 作为妥协的地位。
我能给你的最好的是每当CAPSLOCK时让vim切换背景颜色
密钥在vim中被击中。
Vim无法单独检测CAPSLOCK键。我可以给你的是一个映射,所以你可以使用一些其他键(在这个例子中,F3)像插入模式的CAPSLOCK键一样,并在全部大写时打开时更改背景颜色。希望这将为您提供所需的功能。
将以下内容放在〜/ .vimrc或相应的〜/ .vim / ftplugin /中<文件类型>.vim:
" let the case be toggled in normal mode
map <expr> <F3> ToggleInsertCase()
" let the case be toggled in insert mode
imap <expr> <F3> ToggleInsertCase()
let toUpper = 0
func! ToggleInsertCase()
let g:toUpper = 1 - g:toUpper
if (g:toUpper == 1)
highlight Normal ctermbg=Blue " the background color you want when uppercased
" convert all the letters to uppercase in insert mode
let i = char2nr('a')
while i <= char2nr('z')
let c = nr2char(i)
exe 'inoremap' c toupper(c)
let i = i + 1
endwhile
else
highlight Normal ctermbg=Black " the background color you want normally
" let letters be as normal in insert mode
let i = char2nr('a')
while i <= char2nr('z')
let c = nr2char(i)
exe 'iunmap' c
let i = i + 1
endwhile
endif
" don't insert anything when this function is called in normal mode
return ""
endfunc
这借了一些 蒂姆波普的capslock.vim。
如果您真的想使用CAPSLOCK键,根据您的平台,有一堆免费的应用程序可以让您重新映射 你的CAPSLOCK键是其他东西,所以你可以设置它,这样当你点击CAPSLOCK时,vim(以及其他所有东西)都得到了F3。管他呢。 这会干扰获得CAPSLOCK键的其他应用程序(除非键重映射应用程序很聪明),所以这可能会很麻烦。
我能给你的最好的是每当CAPSLOCK时让vim切换背景颜色
密钥在vim中被击中。
Vim无法单独检测CAPSLOCK键。我可以给你的是一个映射,所以你可以使用一些其他键(在这个例子中,F3)像插入模式的CAPSLOCK键一样,并在全部大写时打开时更改背景颜色。希望这将为您提供所需的功能。
将以下内容放在〜/ .vimrc或相应的〜/ .vim / ftplugin /中<文件类型>.vim:
" let the case be toggled in normal mode
map <expr> <F3> ToggleInsertCase()
" let the case be toggled in insert mode
imap <expr> <F3> ToggleInsertCase()
let toUpper = 0
func! ToggleInsertCase()
let g:toUpper = 1 - g:toUpper
if (g:toUpper == 1)
highlight Normal ctermbg=Blue " the background color you want when uppercased
" convert all the letters to uppercase in insert mode
let i = char2nr('a')
while i <= char2nr('z')
let c = nr2char(i)
exe 'inoremap' c toupper(c)
let i = i + 1
endwhile
else
highlight Normal ctermbg=Black " the background color you want normally
" let letters be as normal in insert mode
let i = char2nr('a')
while i <= char2nr('z')
let c = nr2char(i)
exe 'iunmap' c
let i = i + 1
endwhile
endif
" don't insert anything when this function is called in normal mode
return ""
endfunc
这借了一些 蒂姆波普的capslock.vim。
如果您真的想使用CAPSLOCK键,根据您的平台,有一堆免费的应用程序可以让您重新映射 你的CAPSLOCK键是其他东西,所以你可以设置它,这样当你点击CAPSLOCK时,vim(以及其他所有东西)都得到了F3。管他呢。 这会干扰获得CAPSLOCK键的其他应用程序(除非键重映射应用程序很聪明),所以这可能会很麻烦。
建议将小写字母映射到大写字母的人是在正确的轨道上,但我们需要添加更多细节。诀窍是映射 SQL关键字 大写。然后你可以用小写字母输入它们,vim会把它们转换成大写字母。这是使用缩写而不是映射完成的。例如,如果您创建缩写
:iab ATT American Telephone and Telegraph
然后,每当您在代码中输入“ATT”时,只要您按下空格键,Vim就会自动将其翻译为“美国电话和电报”。 (试试吧!很有趣!)
因此,创建一个新文件并开始输入所有SQL关键字的缩写。
iab select SELECT
iab like LIKE
iab where WHERE
...
由于您只想在编辑SQL源时应用这些缩写,因此请将此文件保存到〜/ .vim / after / ftplugin / sql.vim当Vim检测到它已打开SQL文件时,将执行此文件中的命令。
文件类型检测仅在您打开时才有效,因此请确保您的.vimrc包含以下行:
set nocompat
filet detect plugin on
一旦你开始工作,你应该节省时间 和 从按住换档键一直有较少的腕管!
你能得到的最接近的是Kent的答案。 Vim看不到 大写锁定 (要么 数字键盘(的第一个键, 要么 ScrollLock键,或任何其他修改键本身)因为这些键的状态不是通过终端发送的。
请注意,理论上,gVim可以看到这些修饰符,但实际上并非如此。 gVim的键盘处理在很多其他方面优于vim。
我所做的是将我的大写锁定键绑定到“Compose”键,因此我的大写锁定密钥实际上已丢失,我只是强迫自己使用SHIFT。 :)
您 威力 我想尝试一下,听起来可能是自虐,但从长远来看它会更好。一些人认为大写锁定是多余的。
为什么不为包含imap命令的.sql文件提供文件类型插件,以将所有击键转换为大写。这样,您就不必在键盘上切换实际的大写锁定键,当您返回代码时,一切都会正常。
在$ VIM / vimfiles / ftplugin / sql_too.vim文件中添加以下内容:
imap a A
imap b B
imap c C
imap d D
imap e E
imap f F
imap g G
imap h H
imap i I
imap j J
imap k K
imap l L
imap m M
imap n N
imap o O
imap p P
imap q Q
imap r R
imap s S
imap t T
imap u U
imap v V
imap w W
imap x X
imap y Y
imap z Z
我同意Kent,并将Caps Lock键重新映射到控制键。我使用AutoHotKey在Windows机器上执行此操作,但是如上所述有一个注册表设置 这里 和许多其他地方。如果您不使用Windows,您还可以轻松地重新映射MacOS和unix X窗口平台上的大写锁定键。
方便的 不 不小心盖上帽子,远远超过我一年想要的几次!