在Vim中使用前缀的Map命令

时间:2014-12-11 10:17:35

标签: vim

某些Vim命令可以将表达式作为前缀,如100j20k,如何映射整个命令?我想在调用给定命令之前调用Vim函数。

编辑:我想将j / k的先前输入数保留为重复次数,调用函数可能不相关。例如,我想在每个j或k命令之前做一些簿记,但我不想打破数字前缀。

1 个答案:

答案 0 :(得分:1)

  

每个问题都可以通过添加另一层间接来解决   除了有太多间接层的问题      - David Wheeler和Kevlin Henney的错误引用

那么我们如何解决这个问题呢?添加一层间接

实现此目的的一种方法是使用一个映射表达式,该表达式调用一个执行“簿记”的函数并返回该命令。

let s:bookkeeping = {}
function! s:bookkeeping(count, cmd)
  let s:bookkeeping[a:cmd] = get(s:bookkeeping, a:cmd, 0) + a:count
  return a:cmd
endfunction

nnoremap <expr> j <SID>bookkeeping(v:count1, 'j')

就我个人而言,我认为他们收集这些命令的数据几乎没有收获,因为它们不是上下文,但是看看如何做地图表达可能会很好。有关详细信息,请参阅:h :map-<expr>