在Sublime Text 3上(但我猜它与ST2相同),我知道当你没有选择时复制(CTRL + C
),整行都被复制但我需要知道如何粘贴它在我的光标下面。
它目前粘贴在它上面,对我来说似乎不合逻辑,有没有办法修改这种行为?
答案 0 :(得分:1)
不是它贴在"以上"或"在"下面",它正在当前行上运行。在没有先进行选择的情况下进行复制时,它会复制当前行。当你粘贴它时,它也会在当前行上运行 - 它将缓冲区粘贴到该行中,作为副作用,该行上的任何内容都会被阻挡到下一行。它不能向上碰撞 - 文件只能增长或向下添加新行,你不能向上增长超过第1行。
至于如何修改行为,我建议尝试制作一个宏。
http://docs.sublimetext.info/en/latest/extensibility/macros.html
正如你在评论中所指出的那样,一个宏可以工作,但它有两种不同的方式来进行粘贴,一个用于正常使用,另一个用于此"整行"行为。这是不幸的,尽管有另一种(更难的)解决方案。您可以尝试编写一个Sublime插件来检测如何表现并在每种情况下执行您想要的操作。这对我来说有点超出了我的能力......但是考虑到这一点,我意识到Vintage包已经有了这个命令,因为它的 p 和 P 分别粘贴光标前后的键。我看着Vintage包里找到了他们做的地方。这是他们的代码,但我无法向你解释它是如何工作的。您可能希望尝试模拟ViPasteRight
。
class ViPrefixableCommand(sublime_plugin.TextCommand):
# Ensure register and repeat are picked up from g_input_state, and that
# it'll be recorded on the undo stack
def run_(self, edit_token, args):
if not args:
args = {}
if g_input_state.register:
args['register'] = g_input_state.register
g_input_state.register = None
if g_input_state.prefix_repeat_digits:
args['repeat'] = digits_to_number(g_input_state.prefix_repeat_digits)
g_input_state.prefix_repeat_digits = []
if 'event' in args:
del args['event']
edit = self.view.begin_edit(edit_token, self.name(), args)
try:
return self.run(edit, **args)
finally:
self.view.end_edit(edit)
class ViPasteRight(ViPrefixableCommand):
def advance(self, pt):
if self.view.substr(pt) == '\n' or pt >= self.view.size():
return pt
else:
return pt + 1
def run(self, edit, register = '"', repeat = 1):
visual_mode = self.view.has_non_empty_selection_region()
if not visual_mode:
transform_selection(self.view, lambda pt: self.advance(pt))
self.view.run_command('paste_from_register', {'forward': not visual_mode,
'repeat': repeat,
'register': register})
class ViPasteLeft(ViPrefixableCommand):
def run(self, edit, register = '"', repeat = 1):
self.view.run_command('paste_from_register', {'forward': False,
'repeat': repeat,
'register': register})
以下是他们如何将它们绑定到键上。如果你想尝试适应这个,你可能不需要context
,这是他们需要的东西,因为Vintage模式的模态性质。
{ "keys": ["P"], "command": "vi_paste_left",
"context": [{"key": "setting.command_mode"}]
},
{ "keys": ["p"], "command": "vi_paste_right",
"context": [{"key": "setting.command_mode"}]
},
以下是有关插件的文档部分,如果您想尝试以这种方式解决它。
http://docs.sublimetext.info/en/latest/extensibility/plugins.html
答案 1 :(得分:1)
按照Dan Lowe的回答,我做了这个文件:
http://pastebin.com/7nPWZCPh
并添加了这一行
{ "keys": ["ctrl+shift+v"], "command": "run_macro_file", "args": {"file": "res://Packages/User/paste_no_line.sublime-macro"}},
到我的用户的键绑定。
按预期工作,但我现在有两个不同的“粘贴命令”。