Я запускаю Ubuntu 19.10, и я пытаюсь исказить команду "vv" для открытия последнего отредактированного файла в Vim. Ниже мои результаты выполнения команды 'псевдоним'.
~/Documents/code$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias cls='clear'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias sl='ls --color=auto'
alias vv='!vi'
Я получаю ошибку:
~/Documents/code$ vv
Command '!vi' not found, but there are 15 similar ones.
! v и! vi уже работают команды для открытия последнего отредактированного файла в Vim, но я хочу, чтобы vv также был командой, чтобы сделать ту же функцию, потому что иногда я ленив.
Вещи я попробовал:
Любая справка ценилась бы, спасибо.
Это происходит, потому что расширение истории выполняется перед расширением псевдонима.
Можно вызвать расширение истории в псевдониме при помощи history
команда, с помощью замены команды для замены команды, которая запрашивает историю с ее выводом:
alias vv='$(history -p !vim)'
но это не обработает имена файлов правильно, если они будут содержать символы, которые могли бы инициировать расширение, такое как пробелы. Можно избежать этого использования eval
:
alias vv='eval $(history -p !vim)'
Используйте это:
alias vv="vim -c 'norm! ^O'"
norm
выполните нормальную команду режима ^O
как будто Вы вводите его. Посмотрите :help :normal
для получения дополнительной информации.
^O
один символ, можно ввести его в режиме вставки путем ввода <C-V><C-O>
. Это приносит Вам для длительности позиции курсора, которая находится в последнем файле, который Вы отредактировали.
Таким образом, псевдоним выше совпадает с вводной энергией и ctrl-o нажатия.