【发布时间】:2014-02-16 01:40:33
【问题描述】:
我在 windows 和 linux 上使用 vim。在 linux 上,我想将 ctrl-Q 设置为可视块选择,但仍保持将 ctrl-v 设置为粘贴的行为 mswin。
如何保持 mswin 的行为并使用 ctrl-Q 进行可视块模式?
编辑:我虽然 mswin 也会将 ctrl-Q 映射到可视块模式,但在 vim-gnome 中 ctrl-Q 什么都不做
【问题讨论】:
标签: vim
我在 windows 和 linux 上使用 vim。在 linux 上,我想将 ctrl-Q 设置为可视块选择,但仍保持将 ctrl-v 设置为粘贴的行为 mswin。
如何保持 mswin 的行为并使用 ctrl-Q 进行可视块模式?
编辑:我虽然 mswin 也会将 ctrl-Q 映射到可视块模式,但在 vim-gnome 中 ctrl-Q 什么都不做
【问题讨论】:
标签: vim
首先,我强烈建议您如果您在 linux 机器上工作,请忘记 windows vim 快捷方式。如:ctrl-v、ctrl-q、ctrl-c……
你一定认为这不是你问题的答案。现在我发布“答案”。
要让ctrl-q 在 linux 机器上像 ctrl-v (block selection) 一样工作,你必须说,你使用 gvim 或 vim in terminal。
如果是gvim,那就更简单了,只需要创建一个映射,比如:
nnoremap <c-q> <c-v>
如果你想让<c-q> 在你的终端vim 中工作,你需要了解默认的<C-q> 在你的终端设置中有特殊的含义。
在您的终端中,按<c-q> 将发送stty start 信号。当您首先stop 终端输出滚动(通过ctrl-s)然后您想要恢复时,这一点很重要。也就是说,在终端vim中,如果你按下C-q,它将首先被终端捕获。您当然可以通过禁用stty start 定义来更改该规则。喜欢:
stty start undef
如果您想将其设为默认值,您可以将其添加到您的.bashrc 文件中(我假设您使用的是 bash)。
执行此行后,您可以在 vim 中创建相同的映射 nnoremap <c-q> <c-v>,并在正常模式下按 <c-q>,vim 将进入逐块选择模式。
毕竟,如果你在 linux 机器上工作,我建议你忘记 windows 映射。
【讨论】:
c-v 做p(粘贴),你可以使用我的答案(<c-q> -> <c-v>)中的映射创建映射:nnoremap <c-v> p,它会做你想做的事。如果你有充分的理由在 linux 机器上使用 win-keymap,那很好。无论如何,对我来说,很高兴听到 Windows 管理员使用 vim 作为主编辑器。我曾经写过一个相对较长的 win-batch 文件(400 行),我是在我的 linux vim 中完成的。 :D
如果您不想更改终端设置(stty start undef 以允许使用 ctrl q,如 Kent 的回答中所述)以便能够使用 ctrl v 进行粘贴,您可以将 ctrl v 仅粘贴在视觉和插入模式,并使其在普通模式下阻塞选择:
" Paste from clipboard when in insert mode.
imap <C-V> <ESC>"+gpa
" Paste from clipboard when in visual mode. (Replace whatever is selected in visual mode.)
vmap <C-V> "+gp
您也可以从可视模式复制到剪贴板:
" Copy selection to clipboard when in visual mode.
vmap <C-C> "+y
【讨论】: