2013-08-28 4 views
7

Я часто ловлю себя делать что-то вроде этого при разработке:

:e <file> 
:vsplit <the_same_file> "reopen/re-edit with a vertical split 

Как несколько ответчиков указали, что есть гораздо лучший способ сделать это: :vs<CR>. Предположим, на мгновение не было.

Если бы я открывать файлы в моей оболочке, я хотел бы использовать расширение !$ истории, чтобы захватить последний аргумент предыдущей команды, например:

$ echo "Hello" "stackoverflow" 
Hello stackoverflow 
$ echo "I'm posting on !$" 
I'm posting on stackoverflow 

Это расширение и many others like it, совершенно пересматривал Я использовал командную строку. Существуют ли эквиваленты в vim? Я знаю, % псевдонимы текущий файл. Что относительно аргументов прошлого-команды?

+0

Я не знаю ни прямых эквивалентностей колотить в '' $!. Однако вы можете быть заинтересованы в использовании 'q:', который вызывает окно командной строки. Окно командной строки показывает историю ваших последних команд и позволяет пользователю использовать обычные команды vim для внесения изменений в команду. См. ': H cmdwin' для получения дополнительной информации. –

+0

Я не думаю, что команда командной строки vim имеет тот же набор функций bash's. ваш '! $' может быть короче в bash: ''. также, если вы хотите выполнить операцию в начале вашего вопроса в vim, после того, как вы откроете файл с помощью файла ': e ', вы можете нажать' v' или '' последнее легче нажимать. – Kent

+0

Вы можете использовать ': e%' и ': e #' для (повторного) редактирования текущего файла и предыдущего файла - это поможет? –

ответ

3

Насколько я знаю, Vim не имеет расширение истории.

Естественным делом следует использовать инструменты, которые Vim дает нам в командной строке. И у нас есть варианты!

  • <Up> фильтрация стрелка
  • редактирования командной строки команды
    • CTRL-W удалить слово назад
    • <Left> и <Right> передвигаться, CTRL-B и CTRL-E перейти на начало/конец строки
  • Используйте командную строку е окно q: (или CTRL-F, когда уже в командной строке) для конечной истории власти редактирования
  • Найти идиоматические альтернативные решения в Vim духа для конкретной задачи под рукой
    • автоматически развёрнут маркеры как % и # являются хорошим примером

Если вы действительно хотите, чтобы расширение истории в стиле Bash, вы могли бы с легкостью взломать что-то вместе с командной строкой <expr> (по крайней мере, для более простых случаев).

The раскрывающихся элементов истории, которые я использую наиболее часто (честно говоря, не очень часто):

  • !!, самую последнюю командную строку
  • !-2, второй самой последней командной строки
  • !*, все аргументы но первая из предыдущей командной строки
  • !$, последний аргумент предыдущей командной строки

Вот как можно реализовать их как выражение сокращения:

cnoreabbr <expr> !! getcmdtype() == ':' ? @: : '!*' 
cnoreabbr <expr> !-2 getcmdtype() == ':' ? histget(':', -2) : '!-2' 
cnoreabbr <expr> !* getcmdtype() == ':' ? join(split(@:,'\s\+')[1:], ' ') : '!*' 
cnoreabbr <expr> !$ getcmdtype() == ':' ? split(@:,'\s\+')[-1] : '!$' 

А вот как ваш пример будет работать в Vim:

:echo "Hello Stackoverflow" 
Hello Stackoverflow 
:echo "I'm posting on !$<Enter> 
I'm posting on Stackoverflow 

Конечно, использовать функции для более сложных выражений, если вы действительно решите спуститься по этому маршруту.

+0

Я думал, что вы можете что-то сделать. Однако я не хотел публиковать его в качестве ответа. В основном, потому что раскол не работает хорошо с строками или функциями. – FDinoff

+0

В вашем примере я бы ожидал, что «Hello Stackoverflow» будет заменен как последний аргумент. Который, очевидно, не может произойти, потому что вы раскалываете пробелы. – FDinoff

+0

Он работает только в некоторых простых случаях. Вот почему я сказал «функции использования». Но я не думаю, что разумно (или даже выполнимо) извлечь «@:» и попытаться разобрать командную строку, просто придерживаться нормального редактирования командной строки. – glts

1

Использование :vsp без аргументов разделяет текущее окно.

Не совсем то, что вы просите, но я часто использую %, который является текущее имя файла:

:e some_file 
:vsp % 

См :help cmdline-special

+0

Это задает мне этот конкретный случай, но это также первый случай, о котором я мог подумать, когда хотел повторить предыдущий аргумент или команду с расширением. Слушайте, чтобы узнать о каких-либо расширениях? – Christopher

0

Выдающийся best of VIM tips отметил одну конкретную область, в которой история повторение работает, а именно в замен:

" Summary of editing repeats [N] 
.  last edit (magic dot) 
:&  last substitute 
:%& last substitute every line 
:%&gic last substitute every line confirm 
g%  normal mode repeat last substitute 
g&  last substitute on all lines 
@@  last recording 
@:  last command-mode command 
:!! last :! command 
:~  last substitute 
:help repeating 
Смежные вопросы