在vi中将'f'映射到PageUp

时间:2011-10-26 02:23:39

标签: vim button map controls

我可以将'jj'映射到

imap jj <Esc>

我甚至可以将字母映射到标签导航

map tj :tabprevious<CR>
map tk :tabnext<CR>

但是我无法将g映射到页面上(即使空格键充当向下翻页)

map <Space> <PageDown>
map g <PageUp> 

根据this“当您尝试映射多个键序列时,您将无法以小写或大写字母(”映射太危险“)启动它们,但标点符号和控件人物是公平的游戏。“谁能证实这一点?

如果是这样,如何将函数分配给未映射的键,如'g'

2 个答案:

答案 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>不适合你的两个原因。

  1. 您的vi版本可能不支持PageUp / PageDown。如果这是问题,那么请尝试映射到vi的页面跳转(B表示返回,伴随前进)例如。 map X <C-b>

  2. 另一个选择是它不能按预期工作。在vi PageUp / PageDown中对'viewport'的行为不是光标。所以,如果你看着文件的顶部,但光标不在顶部或不会做任何事情。如果光标是从底部开始的两行,PageDown将无法“工作”。

    要解决此问题,您可以将“向上移动视口”<C-b>和“将光标移动到视口顶部”H组合,例如。 map X <C-b>H(相反的是map X <C-f>L)。或指定自己跳转的行数map X 30k(作品map X 30j)。

  3. 然后选择正确的字符覆盖的问题。 Vi有很多本机命令,事实上很多只有少数几个字符本身没有做什么。 因此,如果您的目标是避免RSI,那么当然会覆盖一些东西。但请务必覆盖对您个人不太有用的内容。

    本机: f在你正常的线上搜索一个给定的符号(可能非常有用,但我猜不是很关键) g on it自己什么都不做,但是gg将光标移动到文件顶部。选择g可能会导致issus,因为vim(不是原始的vi)会将两个快速按键解释为文件顶部而不是两个PageUp。