[讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

Vim、Emacs配置和使用
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#16

帖子 adagio » 2010-01-25 20:16

习惯了,一时半会改不了 :em09
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#17

帖子 banban » 2010-02-01 11:42

复制vim中的内容不是用"+y 的吗,呵呵。复制vim 以外的就是复制后,然后在vim 中点中键。
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#18

帖子 Strange » 2010-02-01 12:48

很早之前我就发起过呼吁,推荐大家使用mswin.vim中的设置。绝对是利大于弊。
ニンニク入れますか?
x60 with gentoo
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#19

帖子 poet » 2010-02-03 13:41

adagio 写了:用vi以来最感觉不爽的就是对系统剪贴板的使用了
众所周知,Ctrl+C、Ctrl+X、Ctrl+V这三个按键,明明在windows和linux里都是通用的粘贴、剪切、复制操作,而且都是针对全局剪贴板的,可是vi偏不这样
大家说说这样好不好?有没有什么缺陷?
c-c, c-x, c-v 并不是 linux 里面的通用粘贴剪切操作,这个是当年微软发明的。发明这个操作的主要目的是为了右手使用鼠标的时候无需把手拿回到键盘上。

但是对于Linux/Vim来说,这样的组合完全是不必要的!

1。如果你使用鼠标。
在任意的地方,直接选择文本即可复制,完全无需使用C-C进行复制。
在任意的地方,直接中键进行粘贴,完全无需使用C-V进行粘贴。
选择任意文本之后,直接右键鼠标然后选择剪切可进行剪切,完全无需使用C-X进行剪切。

这个操作并非仅仅用于vim,而是可以用于所有 Linux 程序(有少数程序不支持这个用法,其原因,我认为是开发者足够的弱智,以至于要屏蔽这个用法,因为缺省情况所有X程序支持)。

2。如果你使用键盘。

使用键盘就更好说了,既然vim的常规复制粘贴都是使用 y 和 p 的,你绑定一个键就好了。具体可以随意。
更何况还有一组真正的windows+linux通用快捷键:Ctrl-Insert, Shift-Insert, Shift-Del。这一组快捷键诞生在微软快捷键之前。对键盘爱好者来说,这应当是按得更舒服的键,其原因是因为它符合正常的指法规则(正常的传统的指法规则是:按左手边Ctrl键时,对应右手边的键盘,右边Ctrl键对应左手边键盘。)
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#20

帖子 adagio » 2010-02-03 13:51

我刚才试用了Ctrl-Insert,貌似等价于yy命令,不是拷贝到系统剪贴板啊?
Shift-Insert倒是可以粘贴系统剪贴板的内容,Shift-Del木有搞懂干啥的

还请湿兄再明示一下 :em06
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
粉笔头
帖子: 1
注册时间: 2009-05-19 23:46

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#21

帖子 粉笔头 » 2010-10-28 18:03

Strange 写了:很早之前我就发起过呼吁,推荐大家使用mswin.vim中的设置。绝对是利大于弊。
首先我承认我对于软件之类的也有点宗教信仰的味道,mswim.vim绝对是画蛇添足的败笔,用那个就丢掉了vim很多好的特性,忘了MS吧
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#22

帖子 Strange » 2010-10-28 19:07

粉笔头 写了:
Strange 写了:很早之前我就发起过呼吁,推荐大家使用mswin.vim中的设置。绝对是利大于弊。
首先我承认我对于软件之类的也有点宗教信仰的味道,mswim.vim绝对是画蛇添足的败笔,用那个就丢掉了vim很多好的特性,忘了MS吧

注册了一年竟然引用我的话做处女贴。

在大家都喜欢以讹传讹的情况下,不得不写点了。

所谓 mswin.vim 是 bram 官方提供的一系列符合 windows 下操作的键盘映射。
在讨论到底是好是不好之前,重要的一点应该是分析一下,他到底映射了哪些键,什么功能被替换了,又增加了什么功能。
" CTRL-X and SHIFT-Del are Cut
" CTRL-C and CTRL-Insert are Copy
" CTRL-V and SHIFT-Insert are Paste
" Use CTRL-Q to do what CTRL-V used to do
" Use CTRL-S for saving, also in Insert mode
" CTRL-Z is Undo; not in cmdline though
" CTRL-Y is Redo (although not repeat); not in cmdline though
" Alt-Space is System menu
" CTRL-A is Select all
" CTRL-Tab is Next window
" CTRL-F4 is Close window
摘自 vim 7.3.47 版的 mswin.vim,全部就这么多了。

对他们进行简单的分类

原来没有,新增加的映射:
CTRL-Q
CTRL-S
Alt-Space
CTRL-Tab
CTRL-F4
原来有,改变功能的映射:
CTRL-X
CTRL-C
CTRL-V
CTRL-Z
CTRL-Y
CTRL-A
可以发现,功能被改动的映射仅仅只有6个键,然后这些键原来都是代表什么意思呢?这里简单解释下
CTRL-X 光标数字-count
CTRL-C break
CTRL-V 列模式
CTRL-Z background
CTRL-Y 屏幕向上滚动1行
CTRL-A 光标数字+count
对上面6个大概又可以进行简单的分类

几乎不使用的功能:
CTRL-C break 除非在很老的终端中,不然c-c本身也已经失去了中断vim的作用,"Type :quit<enter> to quit vim"
CTRL-Z background 同上
这两个映射可以说都是传统终端下编辑器的遗产,即使真的要使用,也可以用 :quit, :shell 这些操作来代替。
CTRL-Y 屏幕向上滚动一行 CTRL-E CTRL-Y是一对,虽然带有主观,但是在vim众多映射中,这两个属于既不方便记,又不方便用的了吧。(通常滚动屏幕会用CTRL-U(p) CTRL-D(own))
有可能常用的功能:
CTRL-V 列模式
CTRL-X 光标数字-count
CTRL-A 光标数字+count
分析最后发现,可能用的功能也就3个
但是其中
CTRL-V 列模式 提供了 CTRL-Q 替代。

剩下两个
CTRL-X 光标数字-count
CTRL-A 光标数字+count
这两个映射,是真真正正可以说缺少了的映射(虽然也不算常用),如果是在喜欢这两个映射的话,完全可以在 source mswin.vim 之前 noremap 一下它们。

接下来我们看 mswin.vim 带来了什么
常用的文本快捷键:
CTRL-A
CTRL-C
CTRL-X
CTRL-V
常用的窗口类快捷键
CTRL-Tab
CTRL-F4
常用的保存快捷键
CTRL-S
undo/redo快捷键
CTRL-Z/CTRL-Y
窗口最大化
Alt-Space
喜欢说这些是 ms 操作的同学,可以对比一下 linux 下其他有输入框,有tab的软件,gedit, mousepad, 甚至firefox, pidgin一类,都使用相近的快捷键
虽然这些快捷键的绑定,是从 ms 那里来的,但是我们能看到,越来越多的软件支持了这些键绑定。这包含了软件作者,甚至成千上万用户的习惯。

看到这里的同学们,还那么反对 mswin.vim 吗?
ニンニク入れますか?
x60 with gentoo
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#24

帖子 lilydjwg » 2010-11-05 22:36

才发现这么个帖子,我来慢慢看看——

首先,我是不用 mswin.vim 的。
adagio 写了: 这下好了,总算找到一个老外的设置,基本解决了我的问题,原因如下:
Ctrl+V在插入模式里是用来输入十、八、十六进制值数字的,对我没用,干脆影射到全局剪贴板的粘贴,使用后感觉不错

然后自己再扩展一下
Ctrl+X、Ctrl+C两个按键在visual模式里根本没用(Ctrl+C在visual模式里效果等同于Esc),干脆分别影射到全局剪贴板的剪切和复制

这样在插入模式里我可以用Ctrl+V粘贴全局剪贴板内容
在visual模式里我可以用Ctrl+X--->剪切选定内容到全局剪贴板Ctrl+C--->复制选定内容到全局剪贴板
同时又达到最小限度的影响vi原有按键功能的目的,挖哈哈哈~~~~~

大家说说这样好不好?有没有什么缺陷?
插入模式的 C-V 我会用到的,用来输入特殊字符。可视模式下我用 C-C 来复制选区。
风间星魂 写了:

代码: 全选

Esc::CapsLock
CapsLock:: Esc
win下用autokey互换了esc和大小写锁定,在linux直接gnome设置互换。这下vim爽多了。
ctrl+c也可以空出来了 :em09
我在 X 这层将它们互换了。以后准备直接设置内核,写到 rc.local 里去,免得终端和自己开的 X 用不了。win 下可以直接修改注册表的,但二进制的数据,我不会修改……
haichang417 写了:在选中文字的时候就已经复制了,找个地方按鼠标中键就粘贴了啊。
所以实际上我很少使用剪贴板的 :-)
adagio 写了: 如果你设置了mouse=a,用中键粘贴你就必须先定位鼠标指针;除非你禁用鼠标,这不是你想要的效果吧?
因为用得少,所以我可以接受普通模式 "*p/"+p,插入模式 <C-R>* / <C-R>+
adagio 写了: 再说了,在控制台下用vim你咋整?
控制台下也没有X下那个剪贴板了。我一般是用screen的剪贴板,或者用鼠标选中+中键粘贴。
fzq5012 写了: 我承认一开始没看清,但是还是认为C-v的设置不好,用默认的S-insert不是更好?
我讨厌打字时手离开主键区,所以插入/命令模式下我设置了bash式的按键 :-)
Strange 写了: 几乎不使用的功能:
CTRL-C break 除非在很老的终端中,不然c-c本身也已经失去了中断vim的作用,"Type :quit<enter> to quit vim"
CTRL-Z background 同上
这两个映射可以说都是传统终端下编辑器的遗产,即使真的要使用,也可以用 :quit, :shell 这些操作来代替。
CTRL-Y 屏幕向上滚动一行 CTRL-E CTRL-Y是一对,虽然带有主观,但是在vim众多映射中,这两个属于既不方便记,又不方便用的了吧。(通常滚动屏幕会用CTRL-U(p) CTRL-D(own))
<C-C> 在终端太常用了,所以偶尔会在 Vim 里也用下,中断Vim正在执行的脚本。
<C-Z> 挂起,在终端忘开screen/使用root身份时经常使用,因为 :sh 命令是新开的shell,我启动Vim之前的命令历史还没存到文件呢。
<C-Y> 在普通模式下在我懒得找鼠标时也会用下。在插入模式下是复制上一行的内容,很常用的功能,另外我还映射了<M-y>用于复制下一行的内容。
Strange 写了:
有可能常用的功能:
CTRL-V 列模式
CTRL-X 光标数字-count
CTRL-A 光标数字+count
分析最后发现,可能用的功能也就3个
但是其中
CTRL-V 列模式 提供了 CTRL-Q 替代。

剩下两个
CTRL-X 光标数字-count
CTRL-A 光标数字+count
这两个映射,是真真正正可以说缺少了的映射(虽然也不算常用),如果是在喜欢这两个映射的话,完全可以在 source mswin.vim 之前 noremap 一下它们。
<C-Q> 不是很好按,而 <C-X> 和 <C-A> 我经常用来调整数值的,不用进去插入模式,也不用准确定位光标位置~
Strange 写了: 接下来我们看 mswin.vim 带来了什么
常用的文本快捷键:
CTRL-A
CTRL-C
CTRL-X
CTRL-V
常用的窗口类快捷键
CTRL-Tab
CTRL-F4
常用的保存快捷键
CTRL-S
undo/redo快捷键
CTRL-Z/CTRL-Y
窗口最大化
Alt-Space
喜欢说这些是 ms 操作的同学,可以对比一下 linux 下其他有输入框,有tab的软件,gedit, mousepad, 甚至firefox, pidgin一类,都使用相近的快捷键
虽然这些快捷键的绑定,是从 ms 那里来的,但是我们能看到,越来越多的软件支持了这些键绑定。这包含了软件作者,甚至成千上万用户的习惯。

看到这里的同学们,还那么反对 mswin.vim 吗?
<C-S> 我映射到保存(:up)命令了,<C-Tab> 到了新建标签页,但因为不好按所以没怎么用过。<C-Y> 上面已经说过了,<C-Z> 是挂起。全选我用 ta (因为我不常用 t 移动位置)。剪切操作在我大脑中已经成为历史了(在Vim之外的地方我会用鼠标拖动文本)。

所以,看到这里,我依旧反对 mswin.vim 在 win 下自动被包含以至于让初学者不解:文档里说 <C-V> 进入列模式,为什么我就不可以呢?

PS: 以上完成于 Vim 中。
头像
lainme
论坛版主
帖子: 7805
注册时间: 2008-09-13 19:17
系统: Arch Linux (x86_64)
联系:

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#25

帖子 lainme » 2010-11-06 14:02

可以只映射一个,从vim里往别的程序复制的ctrl+c

粘贴觉得无必要,无论是从vim里复制还是往vim里复制,中键就能做得很好

有些键盘上alt键也比较顺手,映射成alt的也不错
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#26

帖子 lilydjwg » 2010-11-06 14:35

lainme 写了: 有些键盘上alt键也比较顺手,映射成alt的也不错
Alt 最让我郁闷的是终端下发送 ^],和GUI下不一致不说,而且按Esc后还要等一秒。
头像
willerce
帖子: 21
注册时间: 2008-06-16 14:57

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#27

帖子 willerce » 2010-11-23 0:12

我的ctrl+inset不会粘贴,这是为什么?
头像
thomasxie
帖子: 317
注册时间: 2009-11-22 15:29
联系:

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#28

帖子 thomasxie » 2010-12-15 9:20

:em11
时间就像一张网,你撒在那里,你的收获就在那里。
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#29

帖子 Fermat618 » 2011-03-29 15:58

mswin.vim的确是个引起麻烦的东西,自从我找到windows下vim中C-V等快捷键不正常是mswin.vim造成的以后,就坚决地把它干掉了。

没有mswin.vim, Vim和一般的程序的快捷键不一样。如果有mswin.vim, 又会引起一些不必要的麻烦。的确是不好办。

如果要改快捷键,也是改其它程序的快捷键来符合Vim和Emacs的操作模式。Vim和Emacs的快捷键更具有统一性,更为强大。
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: [讨论]在vim中合理的使用Ctrl+C、Ctrl+X、Ctrl+V操作系统(全局)剪贴板

#30

帖子 fanhe » 2011-03-29 19:39

我用<C-c>和<C-v>
<C-c>在可是模式用,<C-v>在普通模式用
回复