Visual Studio - правильный отступ python [дубликат]

Краткий ответ: ваш метод foo() возвращается немедленно, а вызов $ajax() выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.

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

function foo(result) {
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;   // Store the async result
        }
    });
}

var result = { response: null };   // Object to hold the async result
foo(result);                       // Returns before the async completes

Обратите внимание, что вызов foo() ] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response.

199
задан kenorb 20 April 2015 в 12:22
поделиться

14 ответов

Предупреждение: это нарушит ваше репо.

Это приведет к повреждению двоичных файлов, в том числе к svn, .git! Прочитайте комментарии перед использованием!

find . -type f -exec sed -i.orig 's/\t/ /g' {} +

Исходный файл сохраняется как [filename].orig.

Недостатки:

  • Будет заменять вкладки повсюду в файле.
  • Пройдет много времени, если у вас есть дамп SQL на 5 ГБ в этом каталоге.
58
ответ дан Veedrac 31 August 2018 в 09:45
поделиться

Используйте vim-way:

$ ex +'bufdo retab' -cxa **/*.*
  • Сделайте резервную копию! перед выполнением вышеуказанной команды, поскольку это может повредить ваши двоичные файлы.
  • Чтобы использовать globstar (**) для рекурсии, активируйте shopt -s globstar.
  • Чтобы указать конкретные тип файла, используйте, например: **/*.c.

Чтобы изменить tabstop, добавьте +'set ts=2'.

Однако нижняя сторона состоит в том, что он может замените вкладки внутри строк .

Итак, для немного лучшего решения (с помощью подстановки) попробуйте:

$ ex -s +'bufdo %s/^\t\+/  /ge' -cxa **/*.*

Или с помощью редактора ex + expand:

$ ex -s +'bufdo!%!expand -t2' -cxa **/*.*

Для конечных пробелов см.: Как удалить конечные пробелы для нескольких файлов?


Вы можете добавить следующие в .bash_profile:

# Convert tabs to spaces.
# Usage: retab *.*
# See: https://stackoverflow.com/q/11094383/55075
retab() {
  ex +'set ts=2' +'bufdo retab' -cxa $*
}
12
ответ дан Community 31 August 2018 в 09:45
поделиться

Загрузите и запустите следующий скрипт, чтобы рекурсивно преобразовать жесткие вкладки в мягкие вкладки в текстовые файлы.

Выполнить скрипт из папки, содержащей текстовые файлы.

#!/bin/bash

find . -type f -and -not -path './.git/*' -exec grep -Iq . {} \; -and -print | while read -r file; do {
    echo "Converting... "$file"";
    data=$(expand --initial -t 4 "$file");
    rm "$file";
    echo "$data" > "$file";
}; done;
1
ответ дан daka 31 August 2018 в 09:45
поделиться

Использовать обратную косую черту sed.

В linux:

  • Заменить все вкладки на 1 дефис inplace во всех файлах * .txt:
    sed -i $'s/\t/-/g' *.txt
    
  • Замените все вкладки на 1 место в месте во всех файлах * .txt:
    sed -i $'s/\t/ /g' *.txt
    
  • Замените все вкладки четырьмя пробелами внутри всех * .txt файлов:
    sed -i $'s/\t/    /g' *.txt
    

На mac:

  • Замените все вкладки четырьмя пробелами inplace во всех файлах * .txt:
    sed -i '' $'s/\t/    /g' *.txt
    
11
ответ дан e9t 31 August 2018 в 09:45
поделиться

Простая замена с помощью sed в порядке, но не наилучшим возможным решением. Если между вкладками есть «лишние» пробелы, они все равно будут присутствовать после замены, поэтому поля будут оборваны. Вкладки, развернутые в середине строк, также будут работать неправильно. В bash мы можем сказать вместо этого

find . -name '*.java' ! -type d -exec bash -c 'expand -t 4 "$0" > /tmp/e && mv /tmp/e "$0"' {} \;

применить expand к каждому файлу Java в текущем дереве каталогов. Удалите / замените аргумент -name, если вы настроите таргетинг на другие типы файлов. Как отмечается в одном из замечаний, будьте очень осторожны при удалении -name или использовании слабого шаблона. Вы можете легко сбрасывать репозиторий и другие скрытые файлы без намерения. Вот почему исходный ответ включал это:

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

307
ответ дан Gene 31 August 2018 в 09:45
поделиться

Вы можете использовать find с пакетом tabs-to-spaces для этого.

Сначала установите tabs-to-spaces

npm install -g tabs-to-spaces

, затем запустите эта команда из корневого каталога вашего проекта;

find . -name '*' -exec t2s --spaces 2 {} \;

Это заменит каждый символ tab на 2 spaces в каждом файле.

0
ответ дан Harsh Vakharia 31 August 2018 в 09:45
поделиться

Попробуйте инструмент командной строки expand .

expand -i -t 4 input | sponge output

, где

  • -i используется для расширения только ведущих вкладок на каждой строке
  • -t 4 означает, что каждая вкладка будет преобразована в 4 символа пробелов (по умолчанию 8).
  • sponge moreutils и позволяет избежать очистки входного файла .

Наконец, вы можете использовать gexpand в OSX, после установка coreutils с Homebrew (brew install coreutils).

169
ответ дан Ioannis Filippidis 31 August 2018 в 09:45
поделиться

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

Тем не менее, это также можно сделать с Bash и Awk, если вы захотите сделать некоторые другие модификации вместе с ним.

Если вы используете Bash 4.0 или выше, shopt builtin globstar может использоваться для рекурсивного поиска с помощью **.

С GNU Awk версии 4.1 или выше могут быть сделаны sed как «inplace»:

shopt -s globstar
gawk -i inplace '{gsub("\t","    ")}1' **/*.ext

Если вы хотите установить количество пробелов на каждую вкладку:

gawk -i inplace -v n=4 'BEGIN{for(i=1;i<=n;i++) c=c" "}{gsub("\t",c)}1' **/*.ext
-1
ответ дан John B 31 August 2018 в 09:45
поделиться

Мне нравится пример «найти» выше для рекурсивного приложения. Чтобы адаптировать его к нерекурсивному, только изменение файлов в текущем каталоге, которое соответствует шаблону, расширение оболочки оболочки может быть достаточным для небольших объемов файлов:

ls *.java | awk '{print "expand -t 4 ", $0, " > /tmp/e; mv /tmp/e ", $0}' | sh -v

Если вы хотите, чтобы он молчал после вы надеетесь, что он работает, просто отпустите -v в команде sh в конце.

Конечно, вы можете выбрать любой набор файлов в первой команде. Например, перечислите только определенный подкаталог (или каталоги) таким образом:

ls mod/*/*.php | awk '{print "expand -t 4 ", $0, " > /tmp/e; mv /tmp/e ", $0}' | sh

Или, в свою очередь, запустите find (1) с некоторой комбинацией параметров глубины и т. Д.:

find mod/ -name '*.php' -mindepth 1 -maxdepth 2 | awk '{print "expand -t 4 ", $0, " > /tmp/e; mv /tmp/e ", $0}' | sh
3
ответ дан Josip Rodin 31 August 2018 в 09:45
поделиться

Преобразование вкладок в пространство только в файлах «.lua» [вкладки -> 2 пробела]

find . -iname "*.lua" -exec sed -i "s#\t#  #g" '{}' \;
-1
ответ дан Makah 31 August 2018 в 09:45
поделиться

Как конвертировать вкладки в пробелы в каждом файле каталога (возможно, рекурсивно)?

Обычно это не то, что вы хотите.

Вы хотите сделать это для png-изображений? PDF-файлы? Каталог .git? Ваш Makefile (для которого требуется вкладка )? Дамп SQL 5 ГБ?

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

То, что вы хотите, по крайней мере:

  1. Пропустить файлы по определенному размеру.
  2. Определите, является ли файл двоичным, проверяя наличие NULL-байта.
  3. Заменяйте вкладки только в start файла (expand это sed не делает.)

Насколько я знаю, нет стандартной утилиты Unix, которая может это сделать, и это не очень легко сделать с оболочкой однострочный, поэтому необходим скрипт.

Некоторое время назад я создал небольшой скрипт под названием sanitize_files , который делает именно это. Он также фиксирует некоторые другие распространенные вещи, такие как замена \r\n на \n, добавление трейлинга \n и т. Д.

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

Я также хотел бы отметить, в ответ на некоторые из другие ответы здесь, что использование shell globbing не является надежным способом сделать это, потому что рано или поздно вы получите больше файлов, чем будет вписываться в ARG_MAX (на современных Linux-системах это 128k, что может показаться много, но рано или поздно это не достаточно).


#!/usr/bin/env python
#
# http://code.arp242.net/sanitize_files
#

import os, re, sys


def is_binary(data):
    return data.find(b'\000') >= 0


def should_ignore(path):
    keep = [
        # VCS systems
        '.git/', '.hg/' '.svn/' 'CVS/',

        # These files have significant whitespace/tabs, and cannot be edited
        # safely
        # TODO: there are probably more of these files..
        'Makefile', 'BSDmakefile', 'GNUmakefile', 'Gemfile.lock'
    ]

    for k in keep:
        if '/%s' % k in path:
            return True
    return False


def run(files):
    indent_find = b'\t'
    indent_replace = b'    ' * indent_width

    for f in files:
        if should_ignore(f):
            print('Ignoring %s' % f)
            continue

        try:
            size = os.stat(f).st_size
        # Unresolvable symlink, just ignore those
        except FileNotFoundError as exc:
            print('%s is unresolvable, skipping (%s)' % (f, exc))
            continue

        if size == 0: continue
        if size > 1024 ** 2:
            print("Skipping `%s' because it's over 1MiB" % f)
            continue

        try:
            data = open(f, 'rb').read()
        except (OSError, PermissionError) as exc:
            print("Error: Unable to read `%s': %s" % (f, exc))
            continue

        if is_binary(data):
            print("Skipping `%s' because it looks binary" % f)
            continue

        data = data.split(b'\n')

        fixed_indent = False
        for i, line in enumerate(data):
            # Fix indentation
            repl_count = 0
            while line.startswith(indent_find):
                fixed_indent = True
                repl_count += 1
                line = line.replace(indent_find, b'', 1)

            if repl_count > 0:
                line = indent_replace * repl_count + line

        data = list(filter(lambda x: x is not None, data))

        try:
            open(f, 'wb').write(b'\n'.join(data))
        except (OSError, PermissionError) as exc:
            print("Error: Unable to write to `%s': %s" % (f, exc))


if __name__ == '__main__':
    allfiles = []
    for root, dirs, files in os.walk(os.getcwd()):
        for f in files:
            p = '%s/%s' % (root, f)
            if do_add:
                allfiles.append(p)

    run(allfiles)
2
ответ дан Martin Tournoij 31 August 2018 в 09:45
поделиться

Чтобы преобразовать все файлы Java рекурсивно в каталог, чтобы использовать 4 пробела вместо закладки:

find . -type f -name *.java -exec bash -c 'expand -t 4 {} > /tmp/stuff;mv /tmp/stuff {}' \;
2
ответ дан Raffi Khatchadourian 31 August 2018 в 09:45
поделиться

Я использовал astyle для повторного ввода всего кода на C / C ++ после поиска смешанных вкладок и пробелов. У этого также есть варианты, чтобы заставить особый стиль фигурной скобки, если вы хотите.

1
ответ дан Theo Belaire 31 August 2018 в 09:45
поделиться
0
ответ дан x-yuri 31 August 2018 в 09:45
поделиться
Другие вопросы по тегам:

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