Как поменять два последних аргумента командной строки?

$ ln -s ./dir/target.txt /path/to/source.txt{cursor here} 

Как файл подкачки набирал имена файлов в командной строке? Alt + T заменяет слова, а не имена файлов, в результате ln -s ./dir/target.txt /path/to/txt.source .

В идеале решение должно также правильно интерпретировать "filenames with quotes.txt" .

Можно ли это сделать с помощью некоторых настроек readline и / или bash, или с помощью какого-либо умного использования существующих ярлыков?

Частичный ответ основан на этом . {} обозначает курсор:

 $ ln -s ./dir/target.txt /path/to/source.txt{} 

Ctrl + W (повторите это, если один раз недостаточно, но не Backspace )

 $ ln -s ./dir/target.txt {} 

Ctrl + { , , , }, ,

 $ ln -s {}./dir/target.txt 

Ctrl + Y , пробел

 $ ln -s /path/to/source.txt. {}/dir/target.txt 

Готов.

Я думаю, что это можно сделать, используя команды bang:

 !:0 !:2 !:1 !:0 word designator 0, the zeroth word. !:n The nth word. man bash 

Обозначения слов, раздел.