Это не то, что он вставляет «выше» или «ниже», это значит, что он работает в текущей строке. Когда вы копируете без предварительного выбора, он копирует текущую строку. Когда вы вставляете это, он также работает в текущей строке - он вставляет буфер в эту строку, а в качестве побочного эффекта все, что было на этой линии, удалено с пути на следующую строку. Вместо этого невозможно поднять вверх - файл может только расти или добавлять новые строки вниз, вы не можете расти вверх за линией 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
Ну тогда, я хотел бы что-то вроде: 'ENTER' ' CTRL + V' 'CTRL + МАЙ + k' (удалить всю строку) – Seekme
Я не следую удаление линейной части. Вы пытаетесь получить свою пасту для * замены * текущей строки? Я думал, вы пытались вставить его ниже текущей строки, а не над ней. –
Я действительно пытаюсь вставить его под текущей строкой, но если я нахожусь в текущей строке, нажмите ENTER, вставьте удар, удалите ** пустую строку **, созданную нажатием ENTER, у меня есть желаемое поведение. Вы говорите, что нет абсолютно ** никоим образом ** Я могу иметь то, что хочу? – Seekme