Команда Emacs для удаления до непробельного символа

В тех же строках, что и JSON.encode, следует использовать join ().

function checkArrays( arrA, arrB ){

    //check if lengths are different
    if(arrA.length !== arrB.length) return false;


    //slice so we do not effect the original
    //sort makes sure they are in order
    //join makes it a string so we can do a string compare
    var cA = arrA.slice().sort().join(","); 
    var cB = arrB.slice().sort().join(",");

    return cA===cB;

}

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];  //will return true

console.log( checkArrays(a,b) );  //true
console.log( checkArrays(a,c) );  //false
console.log( checkArrays(a,d) );  //false
console.log( checkArrays(a,e) );  //true

Проблема только в том, что вам нравятся типы, которые были проведены последними сравнительными тестами. Если вам нравятся типы, вам придется зацикливаться.

function checkArrays( arrA, arrB ){

    //check if lengths are different
    if(arrA.length !== arrB.length) return false;

    //slice so we do not effect the orginal
    //sort makes sure they are in order
    var cA = arrA.slice().sort(); 
    var cB = arrB.slice().sort();

    for(var i=0;i<cA.length;i++){
         if(cA[i]!==cB[i]) return false;
    }

    return true;

}

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];

console.log( checkArrays(a,b) );  //true
console.log( checkArrays(a,c) );  //false
console.log( checkArrays(a,d) );  //false
console.log( checkArrays(a,e) );  //false

Если порядок должен оставаться таким же, как это просто цикл, никакой сортировки не требуется.

function checkArrays( arrA, arrB ){

    //check if lengths are different
    if(arrA.length !== arrB.length) return false;


    for(var i=0;i<arrA.length;i++){
         if(arrA[i]!==arrB[i]) return false;
    }

    return true;

}

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];

console.log( checkArrays(a,a) );  //true
console.log( checkArrays(a,b) );  //false
console.log( checkArrays(a,c) );  //false
console.log( checkArrays(a,d) );  //false
console.log( checkArrays(a,e) );  //false
42
задан Cristian 15 January 2009 в 10:37
поделиться

9 ответов

Вы могли бы попробовать delete-indentation, моя любимая команда для присоединения к нескольким строкам в одну строку. В Вашем примере, помещенном курсор на строку со "вторым" и хитом M-^ дважды. Вот документы:

M-^ выполняет команду delete-indentation, которая является интерактивной скомпилированной функцией Lisp в simple.el.

Это связывается с M-^ .

(delete-indentation &optional arg)

Соединение эта строка к предыдущему и ремонтируют пробел в соединении. Если существует префикс заливки, удалите его с начала этой строки. С аргументом соедините эту строку со следующей строкой.

60
ответ дан Bill White 23 September 2019 в 13:21
поделиться

А именно, там команда, которая удалит весь пробел от точки до первого непробельного символа?

существует команда, которая делает почти что:

м выполнений удалять-горизонтальное-пространство команды, которое является интерактивной скомпилированной функцией Lisp в 'simple.el'.

Это связывается с M-\.

(удалять-горизонтальное-пространство & дополнительный обратно-единственный)

Удаляют все пробелы и вкладки вокруг точки. Если обратно-единственный неноль, только удалите их перед точкой.

18
ответ дан Jouni K. Seppänen 23 September 2019 в 13:21
поделиться

Смотрите на эти fixup-whitespace функция. Это идет с Emacs, в simple.el. Его документы:

пробел Fixup между объектами вокруг точки. Оставьте одно пространство или ни один, согласно контексту.

А подобная функция, just-one-space, это

Удаляет все пробелы и вкладки вокруг точки, оставлять одно пространство

обычно связывается с M-SPC .

28
ответ дан Eugene Beresovsky 23 September 2019 в 13:21
поделиться

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

(defun pull-next-line() 
  (interactive) 
  (move-end-of-line 1) 
  (kill-line)
  (just-one-space))

Это - точно противоположность @jrockway move-line-up и delete-indentation, который я нахожу более естественными. Эти just-one-space команда в макросе является точно @Mike M-SPACE.

я связываю pull-next-line с [1 110] (на аналогии с Vim J, для "соединения", команды) использование следующего в моем .emacs.

(global-set-key (kbd "M-J") 'pull-next-line)

Пример. Вызов pull-next-line на первой строке [1 117]

function_call(
     'first_arg',
     'second')

урожаи

function_call( 'first_arg',
     'second')

Вызов его второй раз уступает

function_call( 'first_arg', 'second')
6
ответ дан Chris Conway 23 September 2019 в 13:21
поделиться

Можно всегда использовать M-z для удаления до символа.

Для, например, в Вашем случае:

M-z, 'для удаления до одинарной кавычки (к сожалению, это удалит одинарную кавычку также, но это - незначительное неудобство).

6
ответ дан Amjith 23 September 2019 в 13:21
поделиться

Alt-space уменьшит строку пробела к символу одиночного пробела, но это не удалит новую строку. Однако, это должно помочь немногому.

Для удаления всего от точки до первого непробела (или новая строка) введите непробельный символ, Alt-space, клавиша Backspace (для удаления заключительного пробельного символа), затем возвратитесь (для удаления символа, который Вы добавили.

Для превращения многострочного объявления функции в однострочное объявление используйте комбинацию Alt-space, клавиши Backspace и Alt-E (goto-endofline) команды.

5
ответ дан 23 September 2019 в 13:21
поделиться

Если Вы хотите весь Ваш, удаляет для действия того пути, Вы могли бы проверить жадный - удаляют.

1
ответ дан 23 September 2019 в 13:21
поделиться

Я делаю это:

(defun move-line-up ()
  "Removes leading spaces from the current line, and then moves
the current line to the end of the previous line."
  (interactive)
  (let (start end)
    (save-excursion
      (beginning-of-line)
      ; get first non-space character, only look on this line
      (let ((search-end (save-excursion (end-of-line) (point))))
        (re-search-forward "[^[:space:]]" search-end))
      (setq end (1- (point)))
      (previous-line)
      (end-of-line)
      (setq start (point))
      (delete-region start end))
    (goto-char start)))

(defun move-next-line-up ()
  "Moves the next line to the end of the current line"
  (interactive)
  (next-line)
  (move-line-up))

И связывают их как:

(global-set-key (kbd "C-x ,") 'move-line-up)
(global-set-key (kbd "C-x .") 'move-next-line-up)

Так для решения проблемы, на строке, которая говорит "второй)", просто выполнение C-x , C-x ,

1
ответ дан jrockway 23 September 2019 в 13:21
поделиться

Немного другой подход - создание макроса клавиатуры, который сделает эту работу за вас. Итак, для создания макроэтапа общий сценарий выглядит так:

foo


               bar

[a line with "foo" then a couple of lines later and with some white spaces, write "bar"]

then standing anywhere between foo and bar, do the following:

C-x (                    ; start recording macro
M-b                      ; move backwards to the beginning of foo
END                      ; move to the end of foo
C-space                  ; place mark
C-M-f                    ; move to the end of bar
HOME                     ; move to the beginning of the line
C-w                      ; yank out all the white space
M-SPACE                  ; leave only one space
C-x )                    ; end recording the macro
M-x name-last-kbd-macro  ; name it, call it jline or something 

Now you can always remove all whitespace between two words with M-x one-line

Make sure you remember to save your keyboard macro by issuing M-x insert-kbd-macro somewhere in your .emacs file - this is how it looks:

(fset 'jline
   [?\M-b end ?\C-  ?\C-\M-f home ?\C-w escape ? ])
3
ответ дан 26 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

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