Vim 地图';f';在vi中呼叫
我可以把“jj”映射到Vim 地图';f';在vi中呼叫,vim,button,map,controls,Vim,Button,Map,Controls,我可以把“jj”映射到 imap jj 我甚至可以将字母映射到标签导航 map tj :tabprevious<CR> map tk :tabnext<CR> 映射tj:tabprevious 地图tk:tabnext 但我无法将g映射为向上翻页(即使空格键充当向下翻页) map 地图g 根据“当你试图映射多个键序列时,你将无法以小写或大写字母开头(“太危险了,无法映射”),但标点符号和控制字符是公平的。”有人能证实这一点吗 如果是这样,如何将函数分配给未映射的键
imap jj
我甚至可以将字母映射到标签导航
map tj :tabprevious<CR>
map tk :tabnext<CR>
映射tj:tabprevious
地图tk:tabnext
但我无法将g映射为向上翻页(即使空格键充当向下翻页)
map
地图g
根据“当你试图映射多个键序列时,你将无法以小写或大写字母开头(“太危险了,无法映射”),但标点符号和控制字符是公平的。”有人能证实这一点吗 如果是这样,如何将函数分配给未映射的键(如“g”)(编辑-原始答案建议使用本机Ctrl-f和Ctrl-b,但答案已更新,因为此处的目标是避免使用Ctrl和Shift) 需要补充的几点 假设我们现在选择了
X
,那么就把选择正确字符的问题留给您了
我能想到两个原因,为什么MapX
不适合你
映射X
map X H
(相反的是map X L
)。或者指定要自己跳转的行数map X 30k
(Op.map X 30j
)
g本身什么也不做,但gg将光标移动到文件的顶部。选择g可能会导致问题,因为vim(不是原始vi)会将两次快速按键解释为转到文件顶部,而不是执行两次页面升级。这并没有回答您的问题,但我认为这可能有助于解决您的RSI问题。它映射空格键以在快速和慢速移动模式之间切换。通常按j或k键将向下滚动一行。按空格键将打开快速移动模式,按j或k键将向下/向上滚动10行。再次按空格键可恢复正常。这只适用于vim,而不仅仅是普通的vi(尽管大多数“vi”程序只是指向vim的符号链接) 它可以在正常和可视编辑模式下工作 要使用它,请将此代码放在
~/.vimrc
文件中的某个位置:
map <Space> :call ToggleFastMoveMode()<CR>
vmap <Space> :call ToggleFastMoveMode()<CR>gv
let g:fastMoveMode = 0
function! ToggleFastMoveMode()
let g:fastMoveMode = 1 - g:fastMoveMode
if (g:fastMoveMode == 0)
noremap j j
vnoremap j j
noremap k k
vnoremap k k
else
noremap j 10j
vnoremap j 10j
noremap k 10k
vnoremap k 10k
endif
endfunction
map:calltogglefastmovemode()
vmap:调用ToggleFastMoveMode()gv
设g:fastMoveMode=0
功能!ToggleFastMoveMode()
设g:fastMoveMode=1-g:fastMoveMode
如果(g:fastMoveMode==0)
诺雷马普j
VNOREMAPJ
诺雷马克
VNOREMAPK
其他的
noremap j 10j
vnoremap j 10j
noremap k 10k
VNOREMAPK 10k
恩迪夫
端功能
我刚刚开始专门使用vi来解决我的问题,这是由于Ctrl+anything的缘故。我认为Ctrl键是万恶之源(即使在移动到shift键所在的位置之后)。h、j、k和l都很好,但我需要更多的选择。有什么建议吗?那就有点问题了。当然,如果您愿意,您可以覆盖f,但是您最好覆盖其中一个没有本机vi命令的字符。没有太多未使用的字符,因此通常使用CTRL、SHIFT或(通常是)键,使大多数自定义命令至少有两个键。此处提供了vi命令列表(包括未使用的字符)。但是,如果对给定的字符有更好的用途,则可以覆盖任何已使用的字符。然而,很多人在vi中使用CTRL-k/j或Shift-k/j进行页面的上下转换。Shift k(或k)未使用,Shift j(j)已被占用,但并不重要。我不想使用Shift或CTRL,因为它们位于不方便的位置(实际上是从tab到CTRL的所有按钮)。我不介意两个按钮(空格f表示前进,空格b表示后退),但我想要它,这样如果我按住它,它就会继续滚动,我就不想反复按下这两个按钮。我认为空格键是一个很好的Ctrl键,因为它没有其他用途。enter也是一个很好的选择,因为它执行与“j”g相同的功能,有点奇怪。就其本身而言,它什么也不做,但它并不完全是“未使用的”。在vim中(大多数系统中vi命令链接到vim),gg进入文件顶部,100gg进入第100行,gj和gk用于导航长包装行,因此它可能也不是最佳选择。我已经用一些新信息更新了下面的答案。我可以建议使用数字1和2来表示PageUp/Down吗?您已经有了ctrl-b和ctrl-f来表示PageUp和pagedown(或者ctrl-u和ctrl-d表示半页向上和半页向下,ctrl-e和ctrl-y表示行向上和行向下滚动)@Benoit我放弃了,开始使用ctrl-b/f/u/d,但是ctrl键对手腕非常有害。你必须不断地扭你的手。这就是答案<代码>我也遭受了自作自受的Eclipse和PyCharm驱动的RSI,并不断地哀叹Vim默认使用了“”键和弦。正如我们所建议的,在其他IDE中不断的按键和弦引起的可怕的手腕疼痛是我们许多人首先采用Vim的原因<代码>谢谢你的精彩表演!
map <Space> :call ToggleFastMoveMode()<CR>
vmap <Space> :call ToggleFastMoveMode()<CR>gv
let g:fastMoveMode = 0
function! ToggleFastMoveMode()
let g:fastMoveMode = 1 - g:fastMoveMode
if (g:fastMoveMode == 0)
noremap j j
vnoremap j j
noremap k k
vnoremap k k
else
noremap j 10j
vnoremap j 10j
noremap k 10k
vnoremap k 10k
endif
endfunction