Vim中的C-x重映射

Vim中的C-x重映射,vim,Vim,我需要在Vim中重新映射C-x,使其与某些Windows编辑器中的行为类似: 在视觉模式下,它应该剪切选定的文本 在正常模式下,它应该剪切当前行,只有当它不是空的时候 一个空行应该被删除并放入黑洞注册表 “在$VIMRUNTIME目录中的源代码分发脚本 :runtime mswin.vim 如果有('剪贴板') nmap:调用CutNonEmptyLineToClipboard() “如果当前行为非空,则将其剪切到剪贴板。 “否则我什么也不做。 函数!CutNonEmptyLineToClip

我需要在Vim中重新映射C-x,使其与某些Windows编辑器中的行为类似:

  • 在视觉模式下,它应该剪切选定的文本
  • 在正常模式下,它应该剪切当前行,只有当它不是空的时候
  • 一个空行应该被删除并放入黑洞注册表
“在$VIMRUNTIME目录中的源代码分发脚本
:runtime mswin.vim
如果有('剪贴板')
nmap:调用CutNonEmptyLineToClipboard()
“如果当前行为非空,则将其剪切到剪贴板。
“否则我什么也不做。
函数!CutNonEmptyLineToClipboard()
如果strlen(getline('.')!=0
正常0“*D
恩迪夫
端功能
恩迪夫

更新版本如下。不得不用谷歌搜索“黑洞注册”,我不知道。(谢谢!)我还放了一个不同的空行匹配器。选择最适合你的版本

if has('clipboard')
    nmap <silent> <C-X> :call CutNonEmptyLineToClipboard()<CR>
    " If the current line is non-empty cut it out into the clipboard.
    " Else delete it into the black hole register (named _).
    function! CutNonEmptyLineToClipboard()
        " Test if the current line is non-empty
"       if strlen(getline('.')) != 0
        if match(getline('.'), '^\s*$') == -1
            normal 0"*D
        else
            normal "_dd
        endif
    endfunction
endif
if有('clipboard')
nmap:调用CutNonEmptyLineToClipboard()
“如果当前行为非空,请将其剪切到剪贴板中。
“否则,将其删除到黑洞寄存器(名为33;。
功能!CutNonEmptyLineToClipboard()
“测试当前行是否为非空
“如果strlen(getline('.')!=0
如果匹配(getline('.'),'^\s*$')=-1
正常0“*D
其他的
正常“\u dd
恩迪夫
端功能
恩迪夫

看看vim附带的mswin.vim。你可能只想找到那个文件的来源,获得更多类似Windows的行为。是的,我知道这个文件。它包含这个映射
vnoremap“+x
,它处理了我所问的第1点。很酷。它工作正常,但不尊重最后一点(“应该删除一个空行并放入黑洞注册表”)。它需要一个
否则正常”\u dd
。如果你编辑了答案,我会接受的。@mihai只是提醒了一下,Lumi更新了他们的答案,这似乎解决了你的问题
:)
if has('clipboard')
    nmap <silent> <C-X> :call CutNonEmptyLineToClipboard()<CR>
    " If the current line is non-empty cut it out into the clipboard.
    " Else delete it into the black hole register (named _).
    function! CutNonEmptyLineToClipboard()
        " Test if the current line is non-empty
"       if strlen(getline('.')) != 0
        if match(getline('.'), '^\s*$') == -1
            normal 0"*D
        else
            normal "_dd
        endif
    endfunction
endif