Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 撤消粘贴而不撤消以前的键入_Vim_Paste_Undo - Fatal编程技术网

Vim 撤消粘贴而不撤消以前的键入

Vim 撤消粘贴而不撤消以前的键入,vim,paste,undo,Vim,Paste,Undo,在vim中,我经常在系统剪贴板上粘贴一个乱七八糟的粘贴后,撤销比我想要的更多的内容。有更好的办法吗 复制: Open iTerm # or terminal vi # open vim i # enter insert mode type some stuff Cmd-V # paste the contents of the OS X clipboard 粘贴很乱,因为我没有设置粘贴。所以 Esc # ent

在vim中,我经常在系统剪贴板上粘贴一个乱七八糟的粘贴后,撤销比我想要的更多的内容。有更好的办法吗

复制:

Open iTerm      # or terminal
vi              # open vim
i               # enter insert mode
type some stuff
Cmd-V           # paste the contents of the OS X clipboard
粘贴很乱,因为我没有设置粘贴。所以

Esc # enter command mode
u   # undo
但这会取消我的打字和粘贴


我可以使用不同的撤销吗?除了记住在粘贴之前设置粘贴,一般来说有没有更好的方法呢?

我不确定在粘贴之后你能做些什么,但是一个解决方法是在粘贴之前在插入模式下点击
Ctrl-G
u
。这会将撤消块分为两个单独的块,因此粘贴将作为单独的可撤消操作被记住


当然,如果您必须记住要执行此操作,您也可以使用
:set paste
——但从正面来看,这样可以减少按键次数,而且您不必先进入命令模式

看看这个,它可以自动运行
:设置粘贴使用Cmd-V(或Ctrl-V)粘贴某些文本时。并在完成后离开粘贴模式

在以插入模式粘贴之前,以下映射会创建一个额外的撤消点(通过
:help i_CTRL-G_
)。这样,就可以分别撤消粘贴

inoremap <C-r> <C-g>u<C-r>
inoremap <C-v> <C-g>u<C-v>
inoremap u
inoremap u

这不是您想要的答案,但您确实应该停止使用vim作为非模态编辑器。如果要粘贴,请返回正常模式并使用vim的粘贴命令。 假设您有一个具有剪贴板访问权限的vim版本,这应该可以实现
“+p
。您还可以通过将未命名寄存器设置为
+
(或
*
)寄存器来实现这一点,以便从剪贴板粘贴成为一个简单的
p


下面的问题有一个很好的答案,其中包含了所有这些信息。

实际上,解决方案是你必须先进入命令模式(例如Esc)并重新进入插入模式,但它只有在我手动键入时才起作用,但如果我在
~/.vimrc
中测试它,它似乎“随机”停止工作。谷歌根本没有帮助

我花了很多时间试图解决这个问题,我只是在我的案例中找出了原因:

不要将粘贴键映射到与终端现有粘贴键相同的位置

e、 g.Ctrl+Shift+V将粘贴到我的Konsole终端中,但如果我在
~/.vimrc
中指定此键
,则“仅撤消一次粘贴而非多次粘贴”将不起作用

在我的情况下,我必须使用
而不是

inoremap“+pii
您的情况可能有所不同,但要点是相同的:不要分配相同的粘贴密钥,因为它与现有的终端仿真器密钥冲突

通过将终端粘贴键设置为Ctrl+V,现在
停止工作,但
工作,我已经100%证明了这一结论。


还要注意,vim过于敏感和奇怪。我发现我必须使用
I
然后手动使用两个右键使其在正确的光标位置工作,这意味着我必须将
I
和两个右键也放在
~/.vimrc
中。您的情况可能不同,但要点是相同的,请确保~/.vimrc中的键+顺序与您手动键入的内容100%匹配。

根据终端的不同,您可以使用括号内的粘贴模式自动设置粘贴。当这种情况发生在我身上时,我会选择粘贴的文本并对其进行格式化(在退出模式下点击“=”)哦,不,肯定是在寻找“改变你的习惯以获得巨大成功”而不是“这是如何使用创可贴”的答案。谢谢这里真正关键的事情是使用编译好的+剪贴板选项获取vim的副本。(然后您可以在.vimrc和共享系统剪贴板中设置clipboard=unnamed。)这实际上似乎不起作用。也许与我的vim编译时使用的特性有关?我自己有第一个映射。我不确定Mac上的command-V;它可能是一个映射本身。粘贴前显式键入
u
是否有效?是的。我想我只是没有正确地接受Cmd-v。我在谷歌上搜索了一下,但也没用。
inoremap <C-v> <Esc>"+pi<Esc>i<Right><Right>