基于工作目录的vim keymap

时间:2017-03-11 11:29:42

标签: vim

我使用ack.vim,并在我的COUNT(DISTINCT)

中包含以下键盘映射
SELECT S.State, S.City,
       COUNT(DISTINCT S.Supp_ID) AS Supp_Count,
       COUNT(DISTINCT C.Con_ID) AS Cust_Count 
FROM SuppTb S JOIN
     TransTb T
     ON S.Supp_ID = T.Supp_ID JOIN
     ConsTb C
     ON T.Con_ID = C.Con_ID
GROUP BY S.State, S.City;

在我的笔记文件中搜索标签,这些标签以双引号后跟非空格字符开头。

工作正常,因为我的笔记文件位于一个公共目录中,比如.vimrc

现在,在git repo上说,例如,nnoremap ;f :Ack! ^\" ,我想要在该目录下面的keymap,

~/notes

如果在给定目录下工作,我可以手动设置键映射,但很快就会变得单调乏味。

所以我想知道,当我启动vim时,如何在工作目录上设置keymap。

- 希望vimscript解决方案,可能有助于bash命令。

2 个答案:

答案 0 :(得分:1)

查看https://stackoverflow.com/a/456889/15934

暴露的解决方案可以解决您的问题。通过定义缓冲区特定的映射(:h :map-<buffer>,或者定义可以在映射中使用的缓冲区变量(:h b:var)。

答案 1 :(得分:0)

正如@Luc建议的那样,我可以使用autocmd基于BufEnterBufCreate的文件名。哪个工作正常。

然后我问自己,为什么只坚持命令? 只需使用vim内置函数和简单的vimscript语句!!

所以,让我们把我的要求分解到不同的部分。

  1. 获取当前工作目录。 - getcwd()
  2. 模式匹配。 - =~What does =~ mean in VimScript?
  3. 根据匹配做基本匹配。
  4. 下面的

    是我vimrc中的内容,

    "git, see also " grep
    if getcwd() =~ "/code/repoA/"
        nnoremap ;f :Ack! ^\/\/\ *\"
        nnoremap ,a :!cd %:p:h && git add %<CR>
    else
        nnoremap ;f :Ack! ^\"
    endif