我可以将'jj'映射到
imap jj <Esc>
我甚至可以将字母映射到标签导航
map tj :tabprevious<CR>
map tk :tabnext<CR>
但是我无法将g映射到页面上(即使空格键充当向下翻页)
map <Space> <PageDown>
map g <PageUp>
根据this“当您尝试映射多个键序列时,您将无法以小写或大写字母(”映射太危险“)启动它们,但标点符号和控件人物是公平的游戏。“谁能证实这一点?
如果是这样,如何将函数分配给未映射的键,如'g'
答案 0 :(得分:2)
这不是回答你的问题,但我认为这对你的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
答案 1 :(得分:1)
(编辑 - 原始答案提示原生Ctrl-f和Ctrl-b,但答案已更新,因为此处的目标是避免使用Ctrl和Shift)
要添加几点
假设我们现在选择了X
,请选择正确的角色。
我可以想到map X <PageUp>
不适合你的两个原因。
您的vi版本可能不支持PageUp / PageDown。如果这是问题,那么请尝试映射到vi的页面跳转(B表示返回,伴随前进)例如。 map X <C-b>
。
另一个选择是它不能按预期工作。在vi PageUp / PageDown中对'viewport'的行为不是光标。所以,如果你看着文件的顶部,但光标不在顶部或不会做任何事情。如果光标是从底部开始的两行,PageDown将无法“工作”。
要解决此问题,您可以将“向上移动视口”<C-b>
和“将光标移动到视口顶部”H
组合,例如。 map X <C-b>H
(相反的是map X <C-f>L
)。或指定自己跳转的行数map X 30k
(作品map X 30j
)。
然后选择正确的字符覆盖的问题。 Vi有很多本机命令,事实上很多只有少数几个字符本身没有做什么。 因此,如果您的目标是避免RSI,那么当然会覆盖一些东西。但请务必覆盖对您个人不太有用的内容。
本机: f在你正常的线上搜索一个给定的符号(可能非常有用,但我猜不是很关键) g on it自己什么都不做,但是gg将光标移动到文件顶部。选择g可能会导致issus,因为vim(不是原始的vi)会将两个快速按键解释为文件顶部而不是两个PageUp。