Bash управляет внутри vi

Если Ваш vi vim, затем необходимо заботиться о локалях и настройках enconding в энергии:

Первый вопрос: Какую локаль Вы используете?

echo $LC_ALL

Моя печать оболочки de_DE.utf8

Второй Вопрос: действительно ли это - та же локаль, используемая в энергии? (В сессии энергии)

:set enc

Моя печать энергии encoding=utf-8

HTH

33
11.09.2012, 11:07
9 ответов

Да, например, если Вы хотите сделать ls, попытка:

:!ls

Для порождения оболочки использовать

:shell

45
27.01.2020, 19:37
  • 1
    , как я мог жить без этого? –  harp 11.09.2012, 11:58
  • 2
    На самом деле что-то, что я часто делаю, забывают выполнять vi как корень при редактировании чего-то. Эта команда сохранила меня от длинного, переписывает больше раз, чем я могу помнить. :w !sudo tee % –  Mark D 11.09.2012, 22:06
  • 3
    , которого я желаю, был некоторым способом сделать это у гну nano –  ixtmixilix 13.09.2012, 23:56
  • 4
    и затем как делают Вас, возвращается к редактору после использования: оболочка? –  VaTo 25.11.2016, 21:59
  • 5
    @VaTo: Для возвращения можно ввести: выход –  Raman Kathpalia 07.03.2017, 18:14

Я склонен использовать ctrl+z для сна vi выполните то, что я должен в оболочке, затем fg возобновлять vi. Не точно ответ на Ваш вопрос, но я нахожу очень быстрым способом работать.

Если Вы действительно забываете, что у Вас есть vi, открытый в фоновом режиме (это может произойти, когда Вы заняты), когда Вы пытаетесь выйти из использования оболочки ctrl+d Вас предупредят, что у Вас есть выполнение фоновых заданий, и можно или закрыть их или поразить ctrl+d снова, чтобы выйти из системы. Кроме того, при попытке вновь открыть тот же файл дважды, Вы получаете предупреждение восстановления, таким образом, можно нажать a прерывать, и выполнять fg для возвращения к vi.

12
27.01.2020, 19:37
  • 1
    Это может стать липким, если Вы оказываетесь в том, что Вы делаете на командной строке и забываете, что у Вас есть фоновая энергия. –  Eliot Ball 11.09.2012, 15:30
  • 2
    Да, это возможно, я сделал это сам. Для меня это стоит того, чтобы иметь постоянство оболочки. Я обновлю свой ответ для взятия комментария во внимание –  Rqomey 11.09.2012, 15:38
  • 3
    я думаю, что Вы были бы более обеспеченным экраном гну использования. –  user606723 11.09.2012, 18:03
  • 4
    я использую tmux сам..., но для скорости, и, если зарегистрированный к серверу без tmux или экрана, это - удобный –  Rqomey 11.09.2012, 18:06

Так как Вы упомянули, "получают stdout", обратите внимание, что можно сделать

:r! command

и вывод команды будет добавлен к файлу, или

:<range>!command

иметь содержание диапазона проникло в команду [например. :1,$!wc]

11
27.01.2020, 19:37
  • 1
    :%!command смотрит довольно полезный –  Eliot Ball 11.09.2012, 18:10
  • 2
    я часто использую это для сортировки строк [например. :.,+20 !sort ] номер –  Walter A 12.01.2015, 14:54

Моя предпочтительная идиома

!!command

который является сокращением от

:.!command

который передает текущую строку по каналу посредством команды и вставляет вывод в файл. Наиболее распространенный случай для меня должен отредактировать команду с vi и работать:

!!sh

Или

!<motion>command

такой как (например),

!apsh

выполнять весь текущий абзац через оболочку.

5
27.01.2020, 19:37
  • 1
    Отметьте !} Вы должны быть расположены в начале абзаца, попробовать !ap. (Я не знаю, находится ли это в каждом vi или только энергии), –  Random832 11.09.2012, 19:38

При помощи двоеточия и восклицательного знака можно выполнить любую команду в пути оболочки и сценариях оболочки, иметь в виду, что команда работает при пользователе, запускающем vi/vim программу, и использующий это - среда.

:!<command>

Так как vi использует среду, которая была в действительности, когда это было выполнено, это использует тот же путь, который был в родительской команде. Следует иметь в виду, что некоторые оболочки сохраняют кэш программ в пути, и vi не может работать с этим кэшем (зависящий от оболочки, которую он использует, и это - версия), таким образом, можно закончить тем, что выполнили неправильный двоичный файл в случае, если у Вас есть больше чем один двоичный файл с тем же именем.

4
27.01.2020, 19:37

Вы видите вывод команды путем ввода, например, :!ls -lh в командном режиме.

Если требуется вставить вывод команды в файл, Вы редактируете, просто добавляете r. Например, :r!which perl.

4
27.01.2020, 19:37

У меня есть это в моем .vimrc. Найденный на Переполнении стека некоторое время назад:

" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
0
27.01.2020, 19:37

Я, и делаю, обошел бы это легко в Linux путем открытия двух терминальных окон командной строки, выполнения vi в одном и другое доступное для другой работы одновременно.

0
27.01.2020, 19:37

Используя ! очевидно, корректный ответ, но если Вы переключаетесь назад и вперед часто, что-то как экран или tmux могло бы быть полезным, также.

1
27.01.2020, 19:37

Теги

Похожие вопросы