vim映射键+列表查询器

时间:2016-05-21 16:51:53

标签: vim key-bindings

我对vim很新,有些事我无法工作。

1)LISTCHARS。我设置vim将点放在尾随空格处,但我希望vim用文件中的点替换空格,因为现在vim只在行末尾的最后一个单词之后保存点。另外,我希望vim放一个>在当前行的开头标记并放置一些东西而不是TAB。

2)如何覆盖默认密钥绑定?例如,如果Vim有自己的绑定[Ctrl + A]做某事我希望Shift + T做同样的事情 - 我该怎么办?该问题的扩展:默认情况下,要在vim中的分割窗口之间移动,需要绑定[CTRL+W, arrow](这就像两次一致的点击)。我怎样才能覆盖它?我想使用alt + arr代替[ctrl+w, arrow]

3)我做了:

nmap <C-Space> :NERDTreeToggle<CR>

切换侧边栏,但不起作用。我阅读ctrl-space并不容易覆盖,但我仍然希望用它来切换侧边栏。

2 个答案:

答案 0 :(得分:0)

1)如果您阅读了vim help on 'listchars',您会看到它提供了一个trail:c选项,可用于使用自定义字符{{标记尾随空格1}}。我认为这是您目前使用的选项。幸运的是,从patch 7.4.711开始(另请参阅changelog),c现在支持'listchars'选项,可用于标记所有带有字符space:c的空格。如果您的vim版本足够新,那么您可以使用它。 (请注意,我刚刚链接到的在线vim帮助页面似乎有点过时了,所以它没有提到c选项。)例如:

space:c

关于将:set lcs+=space:. 放在当前行的开头,我认为这是不可能的。所以我担心你运气不好,除非别人知道我不知道的伎俩。

最后,您可以使用>选项放置内容而不是标签。我实际上喜欢使用几个Unicode字符:

tab:xy

2)您在这里寻找的是mapping。您应该注意“Shift + T”实际上只是大写T,因为移动一个字母键会在所有现代计算机上发送该字母的大写变体。所以你可以用你想做的事情:

:set lcs+=tab:•·

这将设置 T 来增加光标下的数字,这是 ^ a 的正常函数。

最后,关于映射alt修改的箭头键,这可能很棘手,因为它取决于您运行vim的平台,例如你是在Windows上运行gvim还是在Unix平台上运行终端。如果是gvim,您可以使用简单的nmap T <C-a> 代码:

<M-...>

但是在其他平台上,你需要弄清楚按下元修改箭头键时可能发送的转义序列,并映射它们。例如,当我在Windows上运行Cygwin vim时,我可以使用它:

nmap <M-Left> <C-w>h
nmap <M-Down> <C-w>j
nmap <M-Up> <C-w>k
nmap <M-Right> <C-w>l

您应该能够通过在缓冲区中输入插入模式(或命令行模式也可以)来计算键组合发送的转义序列,按 ^ v ,然后按下组合键。插入的字符是组合键发送的转义序列。

3)我之前从未使用过NERD树插件或尝试过映射控制空间,所以我不能说这个。也许你可以问一个关注这个问题的新问题。

答案 1 :(得分:0)

1)

如果你刚刚做了:

set listchars=...

这不起作用,因为您还必须打开列表选项:

set list

我误解了你的问题。你应该像建议的bgoldst一样使用trail:.

2)

首先,您必须决定重映射的工作方式,因为重映射是模态的,例如他们在某些模式下工作。例如,如果您希望<shift-t>在正常模式下等于<C-a>,则必须执行nnoremap

nnoremap T <C-a>

您也可以使用

为视觉,插入或命令模式执行此操作
vnoremap
inoremap
cnoremap

推荐阅读:What is the difference between the remap, noremap, nnoremap and vnoremap mapping commands in vim?

3)

<C-space>未映射到真正的ASCII字符,因此难以映射。但是,您仍然可以这样做。输入插入模式,然后键入

<C-v><C-space>

(ctrl + v然后ctrl + space)这将插入vim在按ctrl + space时看到的值。最有可能的是,您会看到^@,例如一个空字节。如果是这种情况,您可以使用

映射到ctrl + space
nnoremap <NUL> :NERDTreeToggle<CR>