vim映射键+列表字符



我对vim很陌生,有几件事我做不好。

1) 列表字符。我将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不容易覆盖,但我仍然想用它来切换侧边栏。

1)如果您阅读'listchars'上的vim帮助,您会发现它提供了一个trail:c选项,可用于用自定义字符c标记尾部空格。我想这就是你目前使用的选项。幸运的是,从补丁7.4.711(另请参阅更改日志)开始,'listchars'现在支持一个space:c选项,该选项可用于用字符c标记所有空间。因此,如果你的vim版本足够新,你可以使用它。(注意,我刚刚链接到的在线vim帮助页面目前似乎有点过时,所以它没有提到space:c选项。)例如:

:set lcs+=space:.

关于将>放在当前行的开头,我认为这是不可能的。所以我担心你运气不好,除非别人知道我不知道的把戏。

最后,您可以使用tab:xy选项来放置一些东西,而不是选项卡。实际上,我喜欢使用几个Unicode字符:

:set lcs+=tab:•·

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

nmap T <C-a>

这将设置T以增加光标下的数字,这是

^a最后,关于映射alt修改的箭头键,这可能很棘手,因为这取决于你在哪个平台上运行vim,例如,你是在Windows上运行gvim,还是在Unix平台上运行终端构建。如果gvim,您可以使用直接的<M-...>代码:

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

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

nmap <Esc>[1;3D <C-w>h
nmap <Esc>[1;3B <C-w>j
nmap <Esc>[1;3A <C-w>k
nmap <Esc>[1;3C <C-w>l

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

3)我以前从未使用过NERD树插件,也从未尝试过映射控制空间,所以我无法使用这个插件。也许你可以提出一个新的问题来关注这个问题。

1)

如果你只是这样做:

set listchars=...

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

set list

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

2)

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

nnoremap T <C-a>

您也可以使用在视觉、插入或命令模式下执行此操作

vnoremap
inoremap
cnoremap

推荐阅读:vim中的remap、noremap、nnoremap和vnoremap映射命令有什么区别?

3)

<C-space>不会映射到真正的ASCII字符,因此很难进行映射。但是,你仍然可以这样做。进入插入模式,然后键入

<C-v><C-space>

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

nnoremap <NUL> :NERDTreeToggle<CR>

最新更新