我是一名热爱使用vim的用户,并最近开始编写一些SQL代码。我喜欢用大写字母写我的SQL语句,有时会忘记切换键,然后很快就在我的代码中造成了混乱,才意识到发生了什么。
至今我还没有找到任何告诉我键是否打开的方法,除了看我的键盘(这需要我从屏幕上看开销很大)。
理想情况下,我希望vim可以在键“开启”时自动更改我的背景颜色,但我愿意接受其他一些屏幕指示器来表示状态作为妥协。
建议将小写字母映射为大写字母的人是正确的,但我们需要添加更多细节。诀窍是将SQL关键字映射为大写字母。然后您可以以小写形式输入它们,vim会将它们转换为大写字母。这是使用缩写而不是映射完成的。例如,如果您创建该缩写
:iab ATT American Telephone and Telegraph
那么,每当您在代码中键入“ATT”时,只要按下空格键,Vim就会自动将其翻译为“American Telephone and Telegraph”。(试试看!很有趣!)
因此,创建一个新文件并开始输入所有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
一旦您使这个工作起来,您将节省时间 并且 减少因为一直按住Shift键而导致的腕隧道症候群!
我能为你提供的最好建议是当在vim中按下CAPSLOCK键时,让vim切换背景颜色。
Vim无法单独检测到CAPSLOCK键。我可以给你一个映射,这样你就可以使用其他键(在本例中为F3)来代替插入模式下的CAPSLOCK键,并在所有大写字母开启时更改背景颜色。希望这能给你所需的功能。
将以下内容放在您的~/.vimrc文件或适当的~/.vim/ftplugin/<filetype>.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
这部分内容借鉴了Tim Pope的capslock.vim。
如果你真的想要使用大写锁定键来实现此功能,根据你的平台,有许多免费应用程序可以让你重新映射大写锁定键到其他按键上,所以你可以将它设置为当你按下大写锁定键时,vim(和其他所有应用程序)都能得到F3。或者其他按键。不过这样会干扰其他应用程序获取大写锁定键(除非键盘映射应用程序很聪明),所以可能会有麻烦。
我同意Kent的观点,将Caps Lock键重新映射为Control键。我在Windows系统上使用AutoHotKey来完成这个操作,但也有一个注册表设置,如此处和其他许多地方所述。如果您没有使用Windows,则还可以轻松地在MacOS和Unix X窗口平台上重新映射大写锁定键。
不意外地开启大写锁定键的便利性远远超过了我每年实际需要它的几次!
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
:%s,^\w\+$,iab & \U&
。 - Tobias