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