Если Ваш vi
vim
, затем необходимо заботиться о локалях и настройках enconding в энергии:
Первый вопрос: Какую локаль Вы используете?
echo $LC_ALL
Моя печать оболочки de_DE.utf8
Второй Вопрос: действительно ли это - та же локаль, используемая в энергии? (В сессии энергии)
:set enc
Моя печать энергии encoding=utf-8
HTH
Да, например, если Вы хотите сделать ls
, попытка:
:!ls
Для порождения оболочки использовать
:shell
Я склонен использовать ctrl+z
для сна vi выполните то, что я должен в оболочке, затем fg
возобновлять vi. Не точно ответ на Ваш вопрос, но я нахожу очень быстрым способом работать.
Если Вы действительно забываете, что у Вас есть vi, открытый в фоновом режиме (это может произойти, когда Вы заняты), когда Вы пытаетесь выйти из использования оболочки ctrl+d
Вас предупредят, что у Вас есть выполнение фоновых заданий, и можно или закрыть их или поразить ctrl+d снова, чтобы выйти из системы. Кроме того, при попытке вновь открыть тот же файл дважды, Вы получаете предупреждение восстановления, таким образом, можно нажать a
прерывать, и выполнять fg для возвращения к vi.
Так как Вы упомянули, "получают stdout", обратите внимание, что можно сделать
:r! command
и вывод команды будет добавлен к файлу, или
:<range>!command
иметь содержание диапазона проникло в команду [например. :1,$!wc
]
:.,+20 !sort
] номер
– Walter A
12.01.2015, 14:54
Моя предпочтительная идиома
!!command
который является сокращением от
:.!command
который передает текущую строку по каналу посредством команды и вставляет вывод в файл. Наиболее распространенный случай для меня должен отредактировать команду с vi и работать:
!!sh
Или
!<motion>command
такой как (например),
!apsh
выполнять весь текущий абзац через оболочку.
!}
Вы должны быть расположены в начале абзаца, попробовать !ap
. (Я не знаю, находится ли это в каждом vi или только энергии),
– Random832
11.09.2012, 19:38
При помощи двоеточия и восклицательного знака можно выполнить любую команду в пути оболочки и сценариях оболочки, иметь в виду, что команда работает при пользователе, запускающем vi/vim программу, и использующий это - среда.
:!<command>
Так как vi использует среду, которая была в действительности, когда это было выполнено, это использует тот же путь, который был в родительской команде. Следует иметь в виду, что некоторые оболочки сохраняют кэш программ в пути, и vi не может работать с этим кэшем (зависящий от оболочки, которую он использует, и это - версия), таким образом, можно закончить тем, что выполнили неправильный двоичный файл в случае, если у Вас есть больше чем один двоичный файл с тем же именем.
Вы видите вывод команды путем ввода, например, :!ls -lh
в командном режиме.
Если требуется вставить вывод команды в файл, Вы редактируете, просто добавляете r
. Например, :r!which perl
.
У меня есть это в моем .vimrc. Найденный на Переполнении стека некоторое время назад:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Я, и делаю, обошел бы это легко в Linux путем открытия двух терминальных окон командной строки, выполнения vi в одном и другое доступное для другой работы одновременно.
Используя !
очевидно, корректный ответ, но если Вы переключаетесь назад и вперед часто, что-то как экран или tmux могло бы быть полезным, также.
:w !sudo tee %
– Mark D 11.09.2012, 22:06nano
– ixtmixilix 13.09.2012, 23:56