Повторить после повторного открытия файла в Vim - PullRequest
0 голосов
/ 13 февраля 2019

Я использую Vim Editor.Я писал программу и сделал некоторые изменения в файле, после чего я «отменил» все изменения и по ошибке закрыл файл.Позже я понял, что подход, который я использовал в коде, является правильным, поэтому я снова открыл файл и попытался выполнить операцию «повторить», но, закрыв сеанс, я думаю, что потерял всю историю.Может кто-нибудь сказать мне, пожалуйста, могу ли я каким-то образом сделать повтор, поскольку перепечатывание всего этого снова довольно утомительно.Есть ли способ, с помощью которого я могу повторить изменения после открытия нового сеанса файла Vim

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Другой подход, если вы выполнили какие-то команды, - это восстановить историю команд, перенаправив ее в регистр.

:redir @h
:history
:redir END
:set paste
"hp


:redir @h ............. start redirecting output to register "h"
:history .............. outputs all commands history
:redir END ............ stops redirecting 
:set paste ............ to avoid wrong indentation
"hp ................... puts the "h" register in the current position

вы можете контролировать, куда поместить ее, выполнив ...

 0put h  .............. pastes the `h` register at the line zero

Как только у вас есть серия команд в файле или регистре, вам будет проще создать такую ​​функцию, как:

function! Helo()
         echo "hello world"
endfunction

Если при каких-либо изменениях вы использовали макрос, допустим, q, вы можете извлечь его или даже отредактировать, потому что макросы - это обычные регистры, которые вы можете переназначать по своему усмотрению.Например, в режиме вставки вы можете ввести:

 Ctrl-r q .................... pastes register q 

 :let @q=  ................... starts reassingning macro q
 :let @q=  ctrl-r q .......... pastes the q register on its reassignment

, установив регистр q в "hello vim"

 :let @q = "ihello\<Return>vim\<Esc>"

OBS: используя двойные кавычки, вы можете использовать управляющие клавиши, как показано выше

Любая сложная команда может быть сохранена в буфер обмена

 :let @+ = @:   .............. places last command on the clipboard
 :@+ ......................... uses clipboard as command
0 голосов
/ 13 февраля 2019

Для этого вам нужно включить :help persistent-undo:

При выгрузке буфера Vim обычно уничтожает дерево отмен, созданных для этого буфера.Установив опцию «отменить», Vim автоматически сохранит вашу историю отмен, когда вы записываете файл, и восстановит историю отмен, когда вы снова редактируете файл.

К сожалению, 'undofile' по умолчанию отключено,поэтому, если вы не настроили его (и если вы попытались повторить и потерпели неудачу, похоже, что он выключен), это бесполезно для вашей текущей проблемы.

Если swap-file все еще валяется (маловероятно, так как там был чистый выход из Vim), вы можете извлечь из него небольшие несогласованные фрагменты своих правок.

мыльница

Чтобы выгрузить типичныйКомментарии: Вы, вероятно, должны принять потерю прямо сейчас, но используйте это как возможность переосмыслить свой подход.Постоянная отмена - действительно хорошая особенность.С современными системами контроля версий (например, Git или Mercurial) вы можете делать коммиты часто и только локально, и редактирование ваших изменений легко сделать.Даже если это не вариант, есть плагины для Vim (например, мой writebackup plugin ), которые позволяют очень легко часто сохранять «снимки» важных состояний редактирования.Любой из них может спасти вас от потери данных в следующий раз!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...