Function Vim功能赢得';在终端vim中没有响应

Function Vim功能赢得';在终端vim中没有响应,function,vim,terminal,Function,Vim,Terminal,我偶然发现了一个类似于Textmate中的功能的函数 显示当前单词的突出显示组 一切都在gvim中完美工作,但在使用vim时不会得到输出,这让我感到困惑 以下是相关部分: nmap <C-S-P> :call <SID>SynStack()<CR> function! <SID>SynStack() if !exists("*synstack") return endif echo map(synstack(line('.'),

我偶然发现了一个类似于Textmate中的功能的函数

显示当前单词的突出显示组

一切都在gvim中完美工作,但在使用vim时不会得到输出,这让我感到困惑

以下是相关部分:

nmap <C-S-P> :call <SID>SynStack()<CR>
function! <SID>SynStack()
  if !exists("*synstack")
    return
  endif
  echo map(synstack(line('.'), col('.')), 
  \       'synIDattr(v:val, "name")')
endfunc$
nmap:callsynstack()
功能!SynStack()
如果!存在(“*synstack”)
返回
恩迪夫
回波图(synstack(line('.')、col('.')),
\“synIDattr(v:val,“name”)”)
endfunc$
我的问题是为什么它会这样,如果可能的话,如何修复它-


我感谢您能提供的任何帮助。

问题在于这一行:

nmap <C-S-P> :call <SID>SynStack()<CR>
nmap:callsynstack()
它要求vim将cControlsShiftp映射到
SynStack
宏。但是,最终使用ASCII字符和ECMA-48控制序列的终端(如xterm)无法将其视为不同的:

  • cControlsShiftP
  • cControlsShiftp
  • c控制P
  • c控制p

它们都以controlP(忽略大小写)的形式出现。gvim可以在不同的环境中工作,其中大多数修改器的组合可以彼此区分。

这属于启用状态。如果这是为了映射控件/shift/p,那么无论vim或其他应用程序如何,它都无法在终端中工作。非常感谢,将其更改为ctrl/p,现在它可以在g/vim中工作。@orlp这里也很好。