vim映射键+;木犀

vim映射键+;木犀,vim,key-bindings,Vim,Key Bindings,我对vim很陌生,有几件事我做不到 1) LISTCHARS。我将vim设置为在尾随空格处放置点,但我希望vim在文件中用点替换空格,因为现在vim只在行尾的最后一个字后保存点。另外,我希望vim在当前行的开头打上一个>标记,并放置一些内容,而不是制表符 2) 如何覆盖默认密钥绑定?例如,如果Vim有自己的绑定[Ctrl+A]在做某事,而我希望Shift+T做同样的事情,我应该怎么做?这个问题的扩展:默认情况下,要在vim中的拆分窗口之间移动,有一个绑定[CTRL+W,arrow](就像两次一致

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

1) LISTCHARS。我将vim设置为在尾随空格处放置点,但我希望vim在文件中用点替换空格,因为现在vim只在行尾的最后一个字后保存点。另外,我希望vim在当前行的开头打上一个>标记,并放置一些内容,而不是制表符

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

3) 我做到了:

nmap:nerdtreethoggle
切换侧边栏,但不起作用。我读了
ctrl-space
不容易重写,但我仍然想用它来切换边栏。

1)如果你读了,你会看到它提供了一个
trail:c
选项,可以用自定义字符
c
来标记尾随空格。我想这就是您当前使用的选项。幸运的是,截至(另请参见),
'listchars'
现在支持
空格:c
选项,该选项可用于用字符
c
标记所有空格。如果您的vim版本足够新,那么您可以使用它。(请注意,我刚才链接到的在线vim帮助页面目前似乎有点过时,因此它没有提到
space:c
选项。)例如:

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

最后,您可以使用
tab:xy
选项放置某些内容而不是选项卡。实际上,我喜欢使用两个Unicode字符:

:set lcs+=tab:•·
2)您在这里寻找的是。您应该注意,“Shift+T”实际上只是大写字母T,因为在所有现代计算机上,移动字母键发送字母的大写变体。因此,您可以使用此功能执行您想要的操作:

nmap T <C-a>
nmap T
这将设置T以增加光标下的数字,这是^a的正常功能

最后,关于映射alt-modified箭头键,这可能很棘手,因为这取决于您运行vim的平台,例如,您是在Windows上运行gvim还是在Unix平台上运行终端构建。如果是gvim,您可以使用简单的
代码:

nmap <M-Left> <C-w>h
nmap <M-Down> <C-w>j
nmap <M-Up> <C-w>k
nmap <M-Right> <C-w>l
nmap h
nmap j
nmap k
nmap l
但在其他平台上,您需要找出按下meta-modified箭头键时可能发送的转义序列,并映射这些序列。例如,当我在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
nmap[1;3dh
nmap[1;3B j
nmap[1;3ak
nmap[1;3C]
通过在缓冲区中输入插入模式(或命令行模式也可以),按^v,然后按组合键,您应该能够计算出组合键发送的转义序列。插入的字符是组合键发送的转义序列

3)我以前从未使用过NERD tree插件,也没有尝试过映射控制空间,因此我无法回答这个问题。也许你可以问一个新问题来关注这个问题。

1)

如果你刚刚做了:

set listchars=...
这将不起作用,因为您还必须使用以下选项打开列表选项:

set list

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

(二)

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

nnoremap T <C-a>
建议阅读:

(三)

无法映射到真正的ASCII字符,因此很难进行映射。但是,您仍然可以进行映射。请进入插入模式,然后键入

<C-v><C-space>

那么关于3)我到底需要在vimrc中输入什么呢?nnoremap:nerdtreettoggle这两行,在ctrl-v+ctrl空格将切换侧栏之后?@Max否,让我们看看vim在按下时看到了什么。如果键入时插入
^@
(很可能会)然后vim看到一个字节,所以你可以jsut做
nnoremap:nerdtreettoggle
,我尝试了设置列表,然后在下一行设置lcs+=tab:•·正如bgoldst提供的那样-这不起作用。我已经尝试过像u提供的那样设置lcs。我写了这个问题。vimrc中就是这样的内容:“listchars set list set list set lcs=trail:·set lcs+=space:·set lcs+=space:·set lcs+=tab:→→ 设置listchars=eol:,这不起作用。只有eol起作用,大约2)在sublime文本或atom中,编写键绑定很容易。例如,在sublime文本中,有双键绑定的语法[“ctrl+k”,“ctrl+b”]切换边栏。vim中有什么语法用于双键绑定?例如C-W+箭头?1)我的假设是,当您运行
set listchars=eol:C
设置时,您正在覆盖
set lcs+=space:C
set lcs+=tab:xy
设置。请注意,前两个设置使用
+=/code>,while上一个设置使用了
=
,没有加号。这将覆盖所有以前的设置。您需要将其更改为
+=
,以使以前的设置保持有效。2)正确。您是对的,我的下线覆盖了以前的lcs。但是,lcs+=制表符•·或lcs+=制表符:→→. 不起作用。我甚至试着删除所有其他lcs,只留下一个标签-它不起作用。顺便问一下,我怎么能把>-放在我当前所在行的开头?
vnoremap
inoremap
cnoremap
<C-v><C-space>
nnoremap <NUL> :NERDTreeToggle<CR>