Как “применить” символы возврата в текстовом файле (идеально в энергии)

Можно получить доступ к группам фиксации как это:

var myString = "something format_abc";
var myRegexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // abc

И если существует несколько соответствий, можно выполнить итерации по ним:

var myString = "something format_abc";
var myRegexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
match = myRegexp.exec(myString);
while (match != null) {
  // matched text: match[0]
  // match start: match.index
  // capturing group n: match[n]
  console.log(match[0])
  match = myRegexp.exec(myString);
}
10
задан Draemon 19 August 2009 в 09:14
поделиться

6 ответов

Включите опцию «вставить» (используя : установить пасту ), а затем нажмите dd i 1 на каждой строке, к которой вы хотите применить возврат. Это также работает, если вы удаляете несколько строк или даже весь файл.

Ключевым моментом здесь является то, что вы используете 1 в режиме вставки, чтобы «напечатать» содержимое регистра 1 (где только что были помещены удаленные строки), а опция «вставить» запрещает Vim использовать какие-либо сопоставления или сокращения.

12
ответ дан 3 December 2019 в 14:53
поделиться

Упрощенный ответ:

8
ответ дан 3 December 2019 в 14:53
поделиться

Просто удалите все вхождения. ^ H (где. - интерпретация регулярного выражения.):

:s/.^H//g

(вставьте ^ H буквально, введя Ctrl-V Ctrl-H)

Это будет применяться к текущей строке. Используйте любой диапазон, который хотите, если хотите применить его к другим строкам.

После того, как вы сделали одну : s ... команду, вы можете повторить ее в другой строке, просто набрав : sg (вам нужно g в конце, чтобы повторно применить ко всем вхождениям в текущей строке).

0
ответ дан 3 December 2019 в 14:53
поделиться

Как насчет следующей функции? Я использовал \% x08 вместо ^ H, так как полученный код проще скопировать и вставить. Вы можете ввести его и использовать Ctrl - V Ctrl - H , если хотите, но я подумал, что \% x08 может быть проще. Это также пытается обработать обратное пространство в начале строки (оно просто удаляет их).

" Define a command to make it easier to use (default range is whole file)
command! -range=% ApplyBackspaces <line1>,<line2>call ApplyBackspaces()

" Function that does the work
function! ApplyBackspaces() range
    " For each line in the selected lines
    for index in range(a:firstline, a:lastline)

        " Get the line as a string
        let thisline = getline(index)

        " Remove backspaces at the start of the line
        let thisline = substitute(thisline, '^\%x08*', '', '')

        " Repeatedly apply backspaces until there are none left
        while thisline =~ '.\%x08'
            " Substitute any character followed by backspace with nothing
            let thisline = substitute(thisline, '.\%x08', '', 'g')
        endwhile

        " Remove any backspaces left at the start of the line
        let thisline = substitute(thisline, '^\%x08*', '', '')

        " Write the line back
        call setline(index, thisline)
    endfor
endfunction

Использование с:

" Whole file:
:ApplyBackspaces
" Whole file (explicitly requested):
:%ApplyBackspaces
" Visual range:
:'<,'>ApplyBackspaces

Для получения дополнительной информации см .:

:help command
:help command-range
:help function
:help function-range-example
:help substitute()
:help =~
:help \%x

Редактировать

Обратите внимание, что если вы хотите работать с в одну строку, можно сделать что-то вроде этого:

" Define the command to default to the current line rather than the whole file
command! -range ApplyBackspaces <line1>,<line2>call ApplyBackspaces()
" Create a mapping so that pressing ,b in normal mode deals with the current line
nmap ,b :ApplyBackspaces<CR>

или просто:

nmap ,b :.ApplyBackspaces<CR>
0
ответ дан 3 December 2019 в 14:53
поделиться

Хорошо, вот простое решение.

Скопируйте этот код в файл с именем crush.c:

#include <stdio.h>

// crush out x^H sequences
// there was a program that did this, once
// cja, 16 nov 09

main()
{
    int c, lc = 0;

    while ((c = getchar()) != EOF) {
        if (c == '\x08')
                lc = '\0';
        else {
                if (lc)
                        putchar(lc);
                lc = c;
        }
    }
    if (lc)
        putchar(lc);
}

Скомпилируйте этот код с помощью вашего любимого компилятора:

gcc crush.c -o crush

Затем используйте его так, чтобы избавиться от этих надоедливых последовательностей:

./crush <infilename >outfilename

Или используйте его в конвейере («скажем» - это приложение для преобразования речи в текст на Mac)

 man date | ./crush | say

Вы можете скопировать crush в свой любимый исполняемый каталог (/ usr / local / bin или что-то подобное), а затем сослаться на него следующим образом

  man date | crush | say
1
ответ дан 3 December 2019 в 14:53
поделиться

Можно поместить LDAP-сервер в аргумент пути к StartEntry, чтобы «LDAP ://» + ldap Server + ldap Query.

Если необходимо выполнить аутентификацию

, используйте элемент (String path, String userId, String password). -121--1206781-

Да, это единственное решение. Каждый компилятор создает DCU и BPL, специфичные для его собственной версии. Единственное исключение, о котором я знаю, это то, что Delphi 2006 и 2007 имеют одинаковый формат.

-121--1906192-

Я погуглил это, пытаясь вспомнить команду, которую я использовал до этого, чтобы «применить» backspaces, а затем я запомнил его: col -b - вот manpage . (Он делает немного больше и происходит от BSD или более точно AT & T UNIX, как говорится в manpage, поэтому, если вы находитесь в Linux, вам может потребоваться установить дополнительный пакет, на debian его в bsdmainutils .)

10
ответ дан 3 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

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