Это происходит независимо от того, использую ли я Ctrl + Shift + V или вставить из контекстного меню.
Как мне остановить это поведение?
Это происходит независимо от того, использую ли я Ctrl + Shift + V или вставить из контекстного меню.
Как мне остановить это поведение?
Ответы:
Не копируйте несколько строк текста, чтобы вставить. Я почти гарантирую, что вы просто копируете последнюю часть строки. Если вы нажмете три раза, чтобы скопировать вставляемую строку кода, вы получите новую строку в конце строки. Если вы хотите быть уверенным, что это действительно проблема, скопируйте всю строку, кроме последней буквы / цифры, и посмотрите, вставляет ли это также новую строку.
Вставляемый текст включает в себя завершающий перевод строки. Когда вы вставляете новую строку, оболочка, запущенная в терминале, видит это как нажатие Enter, поэтому она выполняет команду.
Операция вставки выполняется эмулятором терминала; он передает вставленный текст приложению, запущенному в терминале, так же, как передает текст, набранный пользователем. См. Как работают ввод с клавиатуры и вывод текста? для получения дополнительной информации о том, как работает ввод. Приложение (в данном случае оболочка) не может различить нажатия клавиш и операцию вставки.
В наши дни многие терминальные эмуляторы поддерживают вставку в скобках . В режиме вставки в скобках приложение может отличить операцию вставки от нажатия клавиши. Вставка в скобках полезна только в том случае, если приложение делает что-то другое со вставленным текстом, поэтому оно включено поддержкой приложений, это не то, что настраивается пользователем эмулятора терминала.
В Zsh 5.1 (который вышел несколько недель назад, но пока недоступен в большинстве дистрибутивов) добавлена поддержка режима вставки в скобках. Когда вы вставляете текст, он просто вставляется в командную строку, и вы можете отредактировать его перед нажатием Enterдля запуска командной строки.
Пользователи oh-my-zsh могут использовать плагин safe-paste даже в более ранних версиях zsh.
Еще одна вещь, которую вы можете сделать в zsh - это вставить выделение в виде строки с кавычками (в виде обратной косой черты перед каждым специальным символом оболочки, таким как пробел). Введите, `xsel`
чтобы получить основной выбор (автоматический выбор мыши) или `xsel -b`
получить содержимое буфера обмена (текст, скопированный с помощью Ctrl+ C), затем нажмите Tab.
Если у вас более старая версия zsh и вы хотите вставить содержимое буфера обмена без кавычек, вы можете определить функцию, которая вставит выделение.
function zle_insert_x_selection {
LBUFFER+=$(xsel ${NUMERIC+-b} -o </dev/null)
}
zle -N zle_insert_x_selection
bindkey '\e\C-v' zle_insert_x_selection
Имея это в вашем .zshrc
, вы можете нажать Ctrl+ Alt+, Vчтобы вставить основной выбор, или Ctrl+ U Ctrl+ Alt+, Vчтобы вставить содержимое буфера обмена. Они вставляются перед курсором, без изменений, кроме завершающего символа новой строки. См. Раздел «Использование буфера обмена между bash и X11», чтобы узнать что-то похожее в bash.
Если вы используете bash в качестве оболочки, вы можете нажать, Ctrl-X Ctrl-E
чтобы вызвать редактор (определяется $ VISUAL или $ EDITOR, например vi
или возможно nano
).
Затем вы можете вставить в него свои команды точно так же, как если бы вы редактировали файл. Они будут выполнены, если вы сохраните и выйдите. Или отменен, если вы вышли без сохранения.
Чтобы выполнить многострочную вставку в командную строку, откройте одинарные или двойные кавычки перед вставкой.
$ echo '
paste
...
...
'
Затем вы можете нажать Return, чтобы повторить его. Когда вы нажимаете стрелку вверх, все вставленные вами строки будут на одной редактируемой строке.
Это работает до тех пор, пока в вставляемом вами тексте нет ни одной кавычки.
В окне текстового редактора используйте следующие сочетания клавиш для копирования текста без \ n (перевод строки):
В окне браузера или в другом месте, где текст недоступен для редактирования, используйте один из двух методов:
Как выглядит правильный выбор (без \ n):
ls -al
Как выглядит неправильный выбор (с \ n):
ls -al