Intereting Posts
команда вставки: установка (несколько) разделителей с минимальной установкой CentOS 6.x Я не могу запустить iptables Как использовать шаблон с переменными в awk Настройка snd-dummy на виртуальной машине Ubuntu Solaris – Наследование файлами права собственности пользователя на каталог вывод printf в следующую строку Ошибка «Недостаточно памяти» при копировании больших файлов с помощью pcmanfm Как я могу увидеть, использовались ли termcap или terminfo и как их менять? Выход из X-сессии при закрытии приложения OpenBSD 5.9 извлечение исходного кода через CVS после новой установки OpenBSD 5.9 # anoncvssh: cant 'load library' libc.so.84.2 ' используя доступный через vpn Переименовать начало имени файла, используя определенный текст в самом файле Как предоставить разрешения другому пользователю после регистрации в качестве пользователя root в Linux? awk, когда строка может быть в разных столбцах Документация mbcache

Как перенести аргументы командной строки с помощью emacs keybindings?

Используя Bash, с установленными ключами emacs, привязка ключевых слов транспонирования ( Mt ) не транспонирует аргументы, а «слова» (по собственному определению слов).

Поэтому, если у меня есть это:

 vimdiff project-number-One/Vagrantfile project-number-Two/Vagrantfile.old 

и мой курсор находится между первым и вторым аргументом, когда я ввожу опцию t , вместо этого я получаю

 vimdiff project-number-One/project Vagrantfile-number-Two/Vagrantfile.old 

что явно не то, что я хочу. Как переносить аргументы?

В bash разные команды имеют разные понятия слов. Cw убивает предыдущие пробелы, но большинство других команд, включая Mt используют слова с разделителями пунктуации.

С помощью курсора между первым и вторым аргументом Cw Ce SPC Cy перенесет два слова.

Если вы хотите привязать ключ к транспонированию слов с пробелом, это сложнее. См. Запутанное поведение клавиш в стиле emacs в bash . Вот несколько минимально проверенных кода.

 transpose_whitespace_words () { local prefix=${READLINE_LINE:0:$READLINE_POINT} suffix=${READLINE_LINE:$READLINE_POINT} if [[ $suffix =~ ^[^[:space:]] ]] && [[ $prefix =~ [^[:space:]]+$ ]]; then prefix=${prefix%${BASH_REMATCH[0]}} suffix=${BASH_REMATCH[0]}${suffix} fi if [[ $suffix =~ ^[[:space:]]+ ]]; then prefix=${prefix}${BASH_REMATCH[0]} suffix=${suffix#${BASH_REMATCH[0]}} fi if [[ $prefix =~ ([^[:space:]]+)([[:space:]]+)$ ]]; then local word1=${BASH_REMATCH[1]} space=${BASH_REMATCH[2]} prefix=${prefix%${BASH_REMATCH[0]}} if [[ $suffix =~ [^[:space:]]+ ]]; then suffix=${suffix#${BASH_REMATCH[0]}} READLINE_LINE=${prefix}${BASH_REMATCH[0]}$space$word1$suffix READLINE_POINT=$((${#READLINE_LINE} - ${#suffix})) fi fi } bind -x '"\e\Ct": transpose_whitespace_words' 

Это все проще в zsh …

Если ваш курсор есть:

 vimdiff projectOne/Vagrantfile projectTwo/Vagrantfile ^ 

Нажмите Alt + BTTBBTFTBBTT


Или просто:

Нажмите Ctrl + W , Ctrl + E , вставьте пробел и нажмите Ctrl + Y

Вам нужно нажать BTTBBT вместо одного T