Tcsh и/или завершение каталога удара с переменной скрытый корневой префикс

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

7
задан tshepang 14 July 2014 в 15:27
поделиться

3 ответа

Использование новой строки (byOriginal) и обратное преобразование в байт [] с использованием getBytes () не гарантирует два байта [] с равными значениями. Это связано с вызовом StringCoding. encode (..) , который закодирует String в Charset.defaultCharset () . Во время этого кодирования кодировщик может заменить неизвестные символы и внести другие изменения. Следовательно, использование String.getBytes () может не вернуть массив, равный тому, который вы изначально передали конструктору.

s лучше подходит
  • Вы можете добавить косую черту, используя -S / с compgen вместо вашей команды awk
  • Вы можете использовать $ cur вместо $ terms , поскольку вам не нужно удалять пробелы, но я использую $ lastword и $ new (два новых переменных)
  • Нет необходимости использовать xargs echo , поскольку массив с символами новой строки работает нормально
  • Я не тестировал это с именами каталогов, в которых есть пробелы или символы новой строки
  • 4
    ответ дан 7 December 2019 в 10:04
    поделиться

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

    0
    ответ дан 7 December 2019 в 10:04
    поделиться

    Моим решением, которое, по общему признанию, является 800-фунтовым молотком, было написание perl-скрипта для обработки завершения так, как я хотел. в tcsh...

    complete cd 'p|1|`complete_dirs.pl $:1 $cdpath`|/'
    
    #!/usr/bin/perl
    
    my $pattern = shift @ARGV;
    my @path = @ARGV;
    my @list;
    
    if ($pattern =~ m!^(/.+/|/)(.*)!) {
      @list = &search_dir($1,$2,undef);
    } elsif ($pattern =~ m!(.+/|)(.*)!) {
      my $dir; foreach $dir ('.',@path) {
        push(@list,&search_dir("$dir/$1",$2,$1));
      }
    }
    if (@list) {
      @list = map { &quote_path($_) } @list;
      print join(' ',@list), "\n";
    }
    
    sub search_dir {
      my ($dir,$pattern,$prefix) = @_;
      my @list;
    
      if (opendir(D,$dir)) {
        my $node; while ($node = readdir(D)) {
          next     if ($node =~ /^\./);
          next unless ($node =~ /^$pattern/);
          next unless (-d "$dir$node");
    
          my $actual; if (defined $prefix) {
            $actual = "$prefix$node";
          } elsif ($dir =~ m!/$!) {
            $actual = "$dir$node";
          } else {
            $actual = "$dir/$node";
          }
          push(@list,$actual);
        }
        closedir(D);
      }
      return @list;
    }
    sub quote_path {
      my ($string) = @_;
    
      $string =~ s!(\s)!\\$1!g;
      return $string;
    }
    
    1
    ответ дан 7 December 2019 в 10:04
    поделиться
    Другие вопросы по тегам:

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