В emacs, как убрать символы CR (^ M) и оставить символы LF (^ J)?

Шаблоны должны использоваться в заголовках, потому что компилятор должен создавать экземпляры разных версий кода в зависимости от параметров, заданных / выведенных для параметров шаблона. Помните, что шаблон не представляет собой код напрямую, а шаблон для нескольких версий этого кода. Когда вы компилируете функцию non-template в файле .cpp, вы компилируете конкретную функцию / класс. Это не относится к шаблонам, которые могут быть созданы с использованием разных типов, а именно, если при замене параметров шаблона конкретными типами необходимо исправить конкретный код.

Была функция с ключевым словом export, которая была предназначенный для отдельной компиляции. Функция export устарела в C++11 и, AFAIK, только один компилятор реализовал ее. Вы не должны использовать export. Отдельная компиляция невозможна в C++ или C++11, но, возможно, в C++17, если понятия в нее входят, мы могли бы иметь некоторый способ отдельной компиляции.

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

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

34
задан Cheeso 27 July 2009 в 19:07
поделиться

8 ответов

Для этого нет необходимости в шестнадцатеричном режиме. Просто выполните глобальный поиск и замените ^ J ^ M на ^ J. У меня работает. :) Затем сохраните файл, уничтожьте буфер и снова посетите файл, чтобы в окне был показан новый файловый режим (Unix или DOS).

10
ответ дан 27 November 2019 в 06:23
поделиться

Ой. Этот ^ J ^ M нужно вводить как два буквальных символа. Используйте cq cj , cq cm , а для строки замены используйте cq cj .

.
30
ответ дан 27 November 2019 в 06:23
поделиться

Если вы хотите удалить возврат каретки (обычно отображается как ^ M ) и оставить перевод строки. Вы можете просто посетить файл без какого-либо преобразования:

M-x find-file-literally /path/to/file

Потому что файл с возвратом каретки обычно отображается в режиме DOS (скрывая возврат каретки). В строке режима, вероятно, будет отображаться (DOS) с левой стороны.

После того, как вы это сделаете, появится ^ M , и вы сможете удалить их, как будто любой символ.

5
ответ дан 27 November 2019 в 06:23
поделиться

(в шестнадцатеричном режиме) I ' m не уверен, что можно удалять символы . Я всегда преобразовывал их в пробелы или другие символы, переходил в обычный текстовый редактор и удалял их там.

3
ответ дан 27 November 2019 в 06:23
поделиться

Предполагая, что вы хотите, чтобы закодированный файл DOS был изменен на кодировку UNIX, используйте Mx set-buffer-file-coding-system (Cx RET f), чтобы установить систему кодирования в "unix" и сохраните файл.

8
ответ дан 27 November 2019 в 06:23
поделиться

Также имеется инструмент командной строки под названием unix2dos / dos2unix , который существует специально для преобразования окончаний строк.

9
ответ дан 27 November 2019 в 06:23
поделиться

Вам не нужно использовать шестнадцатеричный режим. Вместо этого:

  • откройте файл таким образом, чтобы показать вам эти ^ M. См. Mx find-file-literally / path / to / file выше. В XEmacs вы также можете выполнить Cu Cx Cf и выбрать двоичную кодировку.
  • выберите строку, которую вы хотите заменить, и скопируйте ее, используя Mw
  • , сделайте M-% (замена запроса) и вставьте то, что вы хотите скопировать, используя Cy
  • присутствует Enter, когда будет предложено заменить его на
  • , можно нажать! теперь заменить все вхождения

Дело в том, что даже если вы не знаете, как ввести то, что пытаетесь заменить, вы всегда можете выбрать / скопировать его.

4
ответ дан 27 November 2019 в 06:23
поделиться

Из http://www.xsteve.at/prg/emacs/xsteve-functions.el :

;02.02.2000
(defun xsteve-remove-control-M ()
  "Remove ^M at end of line in the whole buffer."
  (interactive)
  (save-match-data
    (save-excursion
      (let ((remove-count 0))
        (goto-char (point-min))
        (while (re-search-forward (concat (char-to-string 13) "$") (point-max) t)
          (setq remove-count (+ remove-count 1))
          (replace-match "" nil nil))
        (message (format "%d ^M removed from buffer." remove-count))))))

Добавьте это в свой .emacs и запустите его через Mx xsteve-remove-control-M или привяжите к более простому ключу. Он удалит ^ M в любом режиме.

1
ответ дан 27 November 2019 в 06:23
поделиться
Другие вопросы по тегам:

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