Как исправить отступы всего файла в Vi?

Насколько я знаю, это на 100% безопасно, поскольку полученное изображение на 100% создано в памяти без каких-либо связанных ресурсов и без открытых потоков, оставшихся в памяти. Он действует как любой другой Bitmap, созданный из конструктора, который не указывает какие-либо источники ввода, и в отличие от некоторых других ответов здесь он сохраняет исходный формат пикселей, то есть он может использоваться в индексированных форматах.

На основе этого ответа , но с дополнительными исправлениями и без импорта внешней библиотеки.

/// 
/// Clones an image object to free it from any backing resources.
/// Code taken from http://stackoverflow.com/a/3661892/ with some extra fixes.
/// 
/// The image to clone
/// The cloned image
public static Bitmap CloneImage(Bitmap sourceImage)
{
    Rectangle rect = new Rectangle(0, 0, sourceImage.Width, sourceImage.Height);
    Bitmap targetImage = new Bitmap(rect.Width, rect.Height, sourceImage.PixelFormat);
    targetImage.SetResolution(sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
    BitmapData sourceData = sourceImage.LockBits(rect, ImageLockMode.ReadOnly, sourceImage.PixelFormat);
    BitmapData targetData = targetImage.LockBits(rect, ImageLockMode.WriteOnly, targetImage.PixelFormat);
    Int32 actualDataWidth = ((Image.GetPixelFormatSize(sourceImage.PixelFormat) * rect.Width) + 7) / 8;
    Int32 h = sourceImage.Height;
    Int32 origStride = sourceData.Stride;
    Int32 targetStride = targetData.Stride;
    Byte[] imageData = new Byte[actualDataWidth];
    IntPtr sourcePos = sourceData.Scan0;
    IntPtr destPos = targetData.Scan0;
    // Copy line by line, skipping by stride but copying actual data width
    for (Int32 y = 0; y < h; y++)
    {
        Marshal.Copy(sourcePos, imageData, 0, actualDataWidth);
        Marshal.Copy(imageData, 0, destPos, actualDataWidth);
        sourcePos = new IntPtr(sourcePos.ToInt64() + origStride);
        destPos = new IntPtr(destPos.ToInt64() + targetStride);
    }
    targetImage.UnlockBits(targetData);
    sourceImage.UnlockBits(sourceData);
    // For indexed images, restore the palette. This is not linking to a referenced
    // object in the original image; the getter of Palette creates a new object when called.
    if ((sourceImage.PixelFormat & PixelFormat.Indexed) != 0)
        targetImage.Palette = sourceImage.Palette;
    // Restore DPI settings
    targetImage.SetResolution(sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
    return targetImage;
}

Для вызова просто используйте:

/// Loads an image without locking the underlying file.
/// Path of the image to load
/// The image
public static Bitmap LoadImageSafe(String path)
{
    using (Bitmap sourceImage = new Bitmap(path))
    {
        return CloneImage(sourceImage);
    }
}

Или, из байтов:

/// Loads an image from bytes without leaving open a MemoryStream.
/// Byte array containing the image to load.
/// The image
public static Bitmap LoadImageSafe(Byte[] fileData)
{
    using (MemoryStream stream = new MemoryStream(fileData))
    using (Bitmap sourceImage = new Bitmap(stream))    {
    {
        return CloneImage(sourceImage);
    }
}

602
задан Conner 3 October 2012 в 06:31
поделиться

8 ответов

=, команда отступа может взять движения. Так, gg, чтобы заставить запуск файла, = делать отступ, G в конец файла, gg=G.

1166
ответ дан ib. 3 October 2012 в 17:31
поделиться

vi должен уважать вкладки и пробелы, однако необходимо полагать, что vi может использовать различные вкладки длины, чем другой редактор. Можно ли быть больше конкретными, чем "целая испорченная вещь"?

2
ответ дан Zachery Delafosse 3 October 2012 в 17:31
поделиться

В Vim используйте :insert. Это сохранит все Ваше форматирование и не сделает автоматический отступ. Для получения дополнительной информации help :insert.

7
ответ дан Eric Johnson 3 October 2012 в 17:31
поделиться
  • 1
    @KobiK I' m способный получить путь в настоящее время выполняемого файла сценария os.path.abspath (os.path.dirname (sys.argv [0])). Тогда я мог сделать os.path.join со своим " abc txt". это решило проблему. Большое спасибо – a4aravind 16 October 2013 в 20:29

1G=G. Это должно расположить все строки с отступом в файле. 1G берет Вас, первая строка, = запустит автоматический отступ, и финал G возьмет Вас последняя строка в файле.

11
ответ дан ib. 3 October 2012 в 17:31
поделиться

Прежде, чем вставить в терминал, попробуйте :set paste (и затем :set nopaste после того, как Вы будете сделаны). Это выключит автоматический отступ, перенесется строка, и т.д. функции, которые портят Вашу вставку.

редактирование: Кроме того, я должен указать, что намного лучший результат, чем = расположение с отступом может обычно получаться при помощи внешней программы. Например, я работаю :%!perltidy все время. astyle, cindent, и т.д. может также использоваться. И, конечно, можно отобразить тех который к ключу stroke — и отобразить различные на то же нажатие клавиши в зависимости от типа файла

121
ответ дан derobert 3 October 2012 в 17:31
поделиться
  • 1
    Спасибо, но я don' t имеют сборку проекта и так далее. I' m просто выполняющий сценарий Python от командной строки только. Действительно ли возможно сделать что-то вроде этого в этом случае? Я имею в виду, там какой-либо другой способ сделать их вместе как пакет или что-то как этот? – a4aravind 15 October 2013 в 22:01

:set paste Ваш друг, я использую шпаклевку и заканчиваю тем, что копировал код между окнами. Прежде чем я был включен к :set paste:set nopaste) скопировать/вставить дал мне, соответствует той самой причине.

7
ответ дан ib. 3 October 2012 в 17:31
поделиться
  • 1
    @user2882117, Несомненно, просто помещенный abc.py в том же каталоге как Ваш сценарий или каталог, Вы запускаете интерактивную оболочку в и делаете import abc. Особенно, если it' s только для маленького сценария, я думаю, что это - простое решение, но я не использовал бы его в " real" проект. – tobias_k 15 October 2013 в 22:08

Вы можете использовать аккуратное приложение / служебную программу для создания отступов в файлах HTML и XML, и они довольно хорошо работают с отступами в этих файлах.

Преобразование файла XML

:!tidy -mi -xml %

Преобразование файла HTML

:!tidy -mi -html %
17
ответ дан 22 November 2019 в 21:58
поделиться

, если вы не хотите использовать : установите вставку , средний- щелкните, установить nopaste , вы также можете вставить содержимое буфера обмена:

"*p
"+p

Таким образом вам не придется выходить из обычного режима. Если вам нужно вставить + или * , в зависимости от того, как вы выбрали текст, см. : help quoteplus .

6
ответ дан 22 November 2019 в 21:58
поделиться