mcedit как скрыть символы перевода каретки ^M?

Модератор: /dev/random

Ответить
werzer
Сообщения: 10

mcedit как скрыть символы перевода каретки ^M?

Сообщение werzer »

Добрый день!

Мучает проблема, можно ли при редактировании какого-то файла в mcedit заставить скрывать символы перевода каретки ^M. Мне они глаза просто мозолят. В новой версии mc можно сохранить файл с видновым переносом строки, но можно ли просто скрывать эти переводы каретки?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение eddy »

Сделайте сначала dos2unix <Файл>, отредактируйте, и, если надо перегнать строки в мастдайный формат - unix2dos <Файл>
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

werzer писал(а):
18.02.2010 11:14
но можно ли просто скрывать эти переводы каретки?

отфильтруйте файл этим фильтром:

Код: Выделить всё

sed 's/\r$//'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
werzer
Сообщения: 10

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение werzer »

drBatty писал(а):
18.02.2010 11:47
werzer писал(а):
18.02.2010 11:14
но можно ли просто скрывать эти переводы каретки?

отфильтруйте файл этим фильтром:

Код: Выделить всё

sed 's/\r$//'


То есть перед открытием каждого файла, мне придется запускать эту команду?
Мне конвертировать не нужно, есть проект, там все файлы с видновым переносом строки, также файлы проекта правят куча верстальщиков. Нужно, чтобы mc не показывал символы возврата каретки ^M.
Во всех современных редакторах можно выставить тип перевода строки, а как это сделать в mc?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение eddy »

werzer писал(а):
18.02.2010 12:00
Во всех современных редакторах можно выставить тип перевода строки, а как это сделать в mc?

Говорю же вам: dos2unix / unix2dos. Или же делайте никому, кроме вас, ненужный патч к mc.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

eddy писал(а):
18.02.2010 11:44
Сделайте сначала dos2unix <Файл>, отредактируйте, и, если надо перегнать строки в мастдайный формат - unix2dos <Файл>

dos2unix уже написал
вот unix2dos

Код: Выделить всё

sed '/\r$/!s/$/\r/' -i ~/t.txt


итого:

Код: Выделить всё

alias dos2unix='sed "s/\r$//"'
alias unix2dos='sed "/\r$/b;s/$/\r/"'

это куда-нибудь в /etc/profile
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
werzer
Сообщения: 10

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение werzer »

eddy писал(а):
18.02.2010 12:03
werzer писал(а):
18.02.2010 12:00
Во всех современных редакторах можно выставить тип перевода строки, а как это сделать в mc?

Говорю же вам: dos2unix / unix2dos. Или же делайте никому, кроме вас, ненужный патч к mc.

То есть перед открытием каждого файла, мне придется запускать эти команды?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

werzer писал(а):
18.02.2010 12:00
Мне конвертировать не нужно, есть проект, там все файлы с видновым переносом строки, также файлы проекта правят куча верстальщиков. Нужно, чтобы mc не показывал символы возврата каретки ^M.

сделайте скрипт, что-то вроде

Код: Выделить всё

#!/bin/sh
dos2unix -i $1
mcedit $1
unix2dos -i $1

и повесьте его на F4: тогда этот скрипт сначала сконвертирует файл в нормальный вид, потом отредактирует, а потом отконвертирует обратно в маздаевский.
При этом dos2unix & unix2dos надо брать мои, а не от eddy - при всём уважении, я не знаю, как его конверторы переносят ключ -i.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение eddy »

Напишите скрипт, который будет обрабатывать вам полученные файлы. И другой скрипт, который будет возвращать мастдайное окончание строки и архивировать все в какой-нибудь zip (или что там еще в мастдае "искаропки").

drBatty писал(а):
18.02.2010 12:08
при всём уважении, я не знаю, как его конверторы переносят ключ -i.

Да у меня стандартные бинарники, входящие почти в каждый дистрибутив :) И -i указывать не надо, преобразование и так делается "in place"

Код: Выделить всё

dos2unix -h
usage:
    dos2unix [--verbose|-v] [--test|-t] [--force|-f] \
        [--<x>2<y>|--auto|-<Z>] \
        [<file name> [...]]
where:
    --auto, -A    output will be set based upon auto-detection
            of source format
    --d2u, -U    perform DOS -> UNIX conversion
    --m2u, -T    perform MAC -> UNIX conversion
    --u2d, -D    perform UNIX -> DOS conversion
    --u2m, -M    perform UNIX -> MAC conversion
    --d2m, -O    perform DOS -> MAC conversion
    --m2d, -C    perform MAC -> DOS conversion

    --force        suppress internal conversion type corrections
            based on autodetected input format
    --skipbin, -b    skip binary files
    --test, -t    don't write any conversion results; useful with
            --verbose to just report on source type
    --verbose, -v    print extra information on stderr
    --version, -V    print version information on stderr

- when no options are given then input format will be automatically detected
  and converted as follows:
    DOS -> UNIX
    MAC -> UNIX
    UNIX -> DOS
- same as above applies if --auto option is used
- when no file is given, then stdin is used as input and stdout as output
- binary files will be skipped automatically if option --skipbin
  (or -b) is used
- stray '\r' characters (without a following '\n') in files in DOS format are
  reported but only conversion 'DOS -> Unix' affects them (they are skipped)
- stray '\n' characters in files in MAC format are not detected for now
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

eddy писал(а):
18.02.2010 12:12
Да у меня стандартные бинарники, входящие почти в каждый дистрибутив smile.gif И -i указывать не надо, преобразование и так делается "in place"

ага. но видите-ли, в мой дистр такие не входят ;)
а вот sed есть у всех.
ладно. вот эти скрипты:

Код: Выделить всё

$ cat unix2dos
#!/bin/sh

if [ -z "$1" ]; then
        echo "использование: `basename $0` ИМЯ_ФАЙЛА"
        exit 70
else
        sed -i '/\r$/b;s/$/\r/' $1
fi
$ cat dos2unix
#!/bin/sh

if [ -z "$1" ]; then
        echo "использование: `basename $0` ИМЯ_ФАЙЛА"
        exit 70
else
        sed -i 's/\r$//' $1
fi

эти полностью эквивалентны вашим (только мак строки не умеют)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
werzer
Сообщения: 10

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение werzer »

Сделал вот так:
export EDITOR="/home/werzer/edit.sh"

cat /home/v.dmitriev/edit.sh:
#!/bin/sh
if [ `echo $1 | egrep '\.(tpl)|(html)$'` ]; then
dos2unix $1 >/dev/null 2>&1
mcedit $1
unix2dos $1 >/dev/null 2>&1
else
mcedit $1
fi

Только все равно вышеуказанный скрипт не помог, потому что есть файлы и с юниксовым переводом строк, а когда буду запускать unix2dos, то тогда получается весь файл изменился и svn diff покажет лабуду :( Нужно просто скрыть эти переводы коретки ^M, как это можно сделать?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

werzer писал(а):
18.02.2010 13:05
Только все равно вышеуказанный скрипт не помог, потому что есть файлы и с юниксовым переводом строк, а когда буду запускать unix2dos, то тогда получается весь файл изменился

если вы будете запускать мой скрипт dos2unix для юниксоидных файлов, то ничего не изменится - там проверка есть.
утилиты eddy тоже наверное так умеют, но это уже не ко мне вопрос. То-же самое касается и unix2dos. Зачем вы вводите дополнительные проверки - не слишком понятно (они могут пригодится разве что для редактирования двоичных файлов, которые наши утилиты могут переконвертить случайно)


werzer писал(а):
18.02.2010 13:05
egrep '\.(tpl)|(html)$'

здесь ошибка: не знаю что вы хотели, но без скобок работать будет точно так-же.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
VAA
Сообщения: 224
ОС: Deep Style / Slackware

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение VAA »

Каждый раз для редактирования файла преобразовывать его из виндового формата в юниксовый и обратно? Да побойтесь бога, советнички!!!

В mc можно настроить использование встроенного или внешнего редактора. Если знаете редактор, который может работать с концами строк так, как вам надо - присоедините его внешним. К сожалению, не знаю, реализована ли в последнем MC заявка на добавление клавиши для вызова встроенного редактора при включенной настройке на использование по F4 внешнего (а была такая). Но можно повесить внешний редактор на F3 вместо просмотрщика для указанного списка расширений (и может даже виндовый через вайн?)

В крайнем случае я б лучше запустил FAR через wine (у меня такое работало) для работы с виндовыми текстами, если уж нет ничего более подходящего!

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

P.S. Обратил внимание на приписку внизу сообщений drBatty - очень хорошо сказано :)
Registered Linux user number 436365
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

VAA писал(а):
18.02.2010 15:04
Каждый раз для редактирования файла преобразовывать его из виндового формата в юниксовый и обратно? Да побойтесь бога, советнички!!!

а что тут такого? если файл в кривом формате, то самое логичное - преобразовать его в нормальный. И может быть потом - обратно.
VAA писал(а):
18.02.2010 15:04
MC заявка на добавление клавиши для вызова встроенного редактора при включенной настройке на использование по F4 внешнего (а была такая)

SHIFT+F4 разве отменили?
VAA писал(а):
18.02.2010 15:04
В крайнем случае я б лучше запустил FAR через wine (у меня такое работало) для работы с виндовыми текстами, если уж нет ничего более подходящего!

в принципе многие редакторы умеют работать с вендовыми переносами. я юзаю kate. другое дело, что даже в ней я обычно сначала конвертирую файл в нормальный формат (например, чтоб моя любимая sed не путалась, хотя она тоже умеет такое жрать).
VAA писал(а):
18.02.2010 15:04
Сомневаюсь, что тексты с виндовыми и юниксовыми концами строк перемешаны совсем уж произвольно. Скорее всего, они строго разделены по каталогам и могут редактироваться разными редакторами вполне осознано.

мои скрипты сами определяют формат. причём отдельно для каждой строки. потому не вижу в этом проблемы. проблемы в быстродействии тоже нет - поверьте, тексты в 10...100Мб будут намного дольше открываться и сохранятся, чем конвертироватся.
VAA писал(а):
18.02.2010 15:04
P.S. Обратил внимание на приписку внизу сообщений drBatty - очень хорошо сказано

спасибо. но в данном случае это не "хрен знает какое" решение, а вполне проверенное и общепринятое.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение kamre »

werzer писал(а):
18.02.2010 13:05
...получается весь файл изменился и svn diff покажет лабуду :(

Если уж используется система контроля версий (svn), то пусть она сама и занимается перекодированием концов строк для текстовых файлов при check out/in.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение Nazyvaemykh »

…и чего только люди не придумают, лишь бы VIM не использовать.
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
slavaz
Сообщения: 5
ОС: Linux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение slavaz »

А флейма-то сколько :)

Топикстартеру: фишка не реализована пока что.
http://www.midnight-commander.org/ticket/1652

Как ускорить реализацию: само собой, ускорение произойдёт после приаттачивания патча к тикету.
Второй способ: добавить себя в поле, CC или проголосовать за фичреквест, жмакнув на стрелочку вверх (или стрелочку вниз - кому как) :)

Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение eddy »

Как вы думаете, почему патч (на написание которого у разработчиков mc ушло бы максимум 10-15 минут) до сих пор не написали? Да не нужен он!
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
slavaz
Сообщения: 5
ОС: Linux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение slavaz »

eddy писал(а):
25.02.2010 19:28
Как вы думаете, почему патч (на написание которого у разработчиков mc ушло бы максимум 10-15 минут) до сих пор не написали? Да не нужен он!

Вы весьма смело говорите за разработчиков.

Одна из причин, по которой этот фичреквест (и многие другие) до сих пор не реализованы: много более важных багрепортов, требующих фиксинга. http://www.midnight-commander.org/report/1. Обсуждаемый здесь фичреквест - это лишь один тикет из почти трёхсот (не самый важный). Но это абсолютно не означает, что фича не нужна.
Ну ещё весомая причина: лениво иногда бывает.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

slavaz писал(а):
25.02.2010 22:22
Вы весьма смело говорите за разработчиков.

такую фичу и я могу реализовать, хотя и дольше, чем за 15 минут, но не слишком это и долго. Но не за 15 - потому-что я не знаю чужой код, а разрабы - знают, им действительно минут 15. Вот только, как бы там не было, но такой фичи скорее всего не будет - есть проблемы поважнее.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение /dev/random »

drBatty писал(а):
26.02.2010 07:44
такую фичу и я могу реализовать, хотя и дольше, чем за 15 минут, но не слишком это и долго. Но не за 15 - потому-что я не знаю чужой код, а разрабы - знают, им действительно минут 15. Вот только, как бы там не было, но такой фичи скорее всего не будет - есть проблемы поважнее.

Да там и 5 хватит. grep'ом найти read'ы (или fscanf'ы) и вставить туда фильтрацию лишнего символа.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

/dev/random писал(а):
26.02.2010 07:47
(или fscanf'ы)

или fprintf или write или...
там вообще вроде через ncurses или как-то так...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение /dev/random »

drBatty писал(а):
26.02.2010 08:01
или fprintf или write или...
там вообще вроде через ncurses или как-то так...

Я имел в виду чтение файла.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение drBatty »

/dev/random писал(а):
26.02.2010 08:03
Я имел в виду чтение файла.

ну если там просто read... а если нет?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение eddy »

drBatty писал(а):
26.02.2010 16:41
ну если там просто read... а если нет?

Поэтому я и говорил разработчикам достаточно нескольких минут. Простому смертному придется очень долго ковыряться в исходниках, чтобы найти, куда дописать фильтрацию отображения этих жутких \r.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
DarkHobbit
Сообщения: 52
ОС: ASPLinux -> Gentoo -> Debian
Контактная информация:

Re: mcedit как скрыть символы перевода каретки ^M?

Сообщение DarkHobbit »

slavaz писал(а):
25.02.2010 19:01
фишка не реализована пока что.

Фишка нужная (пошёл голосовать).
Спасибо сказали:
Ответить