Как я только отменяю вставленный текст в энергии?

Как он говорит, это отправляет сигнал всем членам группы процесса вызывающей стороны.

Группы процесса используются для реализации управления заданиями в оболочке (они могут использоваться для других вещей, но интерактивное управление заданиями оболочки является главной причиной для их существования).

Вы заметите, что при вводе Ctrl-C все процессы текущих заданий уничтожаются, не только то, которое запустило их. Кроме того, это не уничтожает фоновые задания.

Это достигается с группами процесса. Задание является группой процессов, запущенных оболочкой, которую оболочка может вставить фон или передний план (набор как группа приоритетного процесса терминала или не), и уничтожить в целом.

Можно узнать об идентификаторах группы процесса и идентификаторах сессии с ps -j (j для Управления заданиями).

Уничтожить группу процесса PGID $x, Вы делаете:

kill -- "-$x"

kill 0 уничтожает группу процесса вызывающей стороны.

Обратите внимание на это, если Вы делаете: /bin/kill 0, оболочка запустит новое задание для выполнения этого kill команда, таким образом, kill только уничтожит себя.

kill обычно оболочка, встроенная хотя, таким образом, kill уничтожит группу процесса оболочки.

Однако, когда оболочка является интерактивной, это - группы процесса управления процесса, так обычно нет никакого другого процесса в группе процесса оболочки. Все процессы, запущенные оболочкой, находятся в других группах процесса:

$ sleep 1000 &
[1] 22746
$ ps -j
  PID  PGID   SID TTY          TIME CMD
22735 22735 22735 pts/23   00:00:00 zsh
22746 22746 22735 pts/23   00:00:00 sleep
22749 22749 22735 pts/23   00:00:00 ps

Выше, sleep и ps находятся в двух различных группах процесса, один в фоне, один на переднем плане, и они отличаются от группы процесса оболочки.

Вы могли сделать хотя:

(man kill & sleep 1; ps -j; kill 0)

Интерактивная оболочка запустила бы новую группу процесса для той подоболочки, и и подоболочка и человек (и другие команды, запущенные человеком как Ваш пейджер, groff...), будут в той же группе процесса, таким образом, kill 0 работал бы там. ( sleep выше должен дать достаточно времени для пейджера для запуска так, мы видим его в ps -j вывод, прежде чем мы уничтожим его).

9
24.07.2014, 22:48
2 ответа

Один из способов - это явное удаление и возврат в режим вставки перед вставкой. Если вы расширите команды вставки, вы также можете автоматически установить точку отмены перед вставкой:

" Any text fragment pasted in insert mode should be undone separately, without
" destroying what was typed before.
inoremap <C-R> <C-G>u<C-R>

Вышеупомянутое относится к встроенной команде i_CTRL-R . Я не знаю, как Command-v реализована в MacVim, но добавление u к команде : imap должно дать тот же эффект.

3
27.01.2020, 20:07

В MacVim вам нужно отменить отображение пункта меню Правка> Вставить , чтобы переопределить ярлык, затем вы можете переназначить Cmd-V ( Dv ] на языке MacVim) к соответствующей команде в каждом режиме. Я добавил это в свой ~ / .gvimrc , и теперь все работает замечательно:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

u необходим только в режиме вставки, чтобы исправить историю отмены; noremap и cnoremap предназначены просто для восстановления поведения вставки по умолчанию в нормальном и командном режимах.

Спасибо Инго Каркату за то, что он указал мне в правильном направлении.

2
27.01.2020, 20:07

Теги

Похожие вопросы