Вы могли всегда делать:
ls *.tgz | grep -v Broad_hapmap3_r2_Affy6_cels_excluded.tgz | xargs -n1 tar zxvf
Но я подозреваю, что кто-то отправит более чистый путь, действительно делают это непосредственно от оболочки удара, не нуждаясь в grep там.
В первую очередь, в случае, если Вы не знаете об этом, Emacs имеет hexl-find-file
который открывает файл в шестнадцатеричном режиме редактирования. Я знаю, что это не то, что Вы попросили, а если Вы уже используете один, и Вы довольны Emacs, затем хорошо знать об этом для будущих потребностей.
Во-вторых, для этого вида "необработанного" редактирования файла (который я склонен делать часто), find-file-literally
является действительно большим. Это делает то, что Вы ожидали бы, что это сделает и симулируете быть pre-unicode версией себя и открывать файл с Escape, собирающимися для символов неASCII (и символы управления и т.д.). Это, вероятно, сделает то, что Вы хотите, хотя это действительно имеет очевидный недостаток неспособности на самом деле прочитать текст, если у Вас есть много содержания неASCII.
Так понижаясь далее в примитивную поддержку, существует enable-multibyte-characters
переменная и set-buffer-multibyte
функция, которая используется для переключения этого. Хорошая вещь об этом состоит в том, что это изменяет буферную презентацию динамично - например, попробуйте это:
(defun my-multi-toggle ()
(interactive)
(set-buffer-multibyte (not enable-multibyte-characters)))
(global-set-key (kbd "C-~") 'my-multi-toggle)
и у Вас теперь есть ключ, который переключает режим без предварительной обработки динамично. Это также имеет хорошее свойство отъезда курсора в том же месте. Но этот режим без предварительной обработки показывает Вам внутреннее представление (который похож на UTF-8), и не независимо от того, что файл, оказывается, использует в качестве своего кодирования. Должно быть возможно сделать то, о чем Вы говорите с некоторым взломом (например, с помощью find-file-literally
на открытом файле спросит Вас о пересматривании его, но это сбрасывает местоположение и перезагружает файл также) - но это кажется, что вышеупомянутое уже прекрасно. (Таким образом, мое предположение - то, что Вы пытаетесь отредактировать некоторое текстовое поле в в других отношениях двоичном файле...),
Мне удалось бросить вместе elisp сценарий для показа байтового смещения в точке (poff) (через сочетание клавиш).
Его презентация в настоящее время очень груба, но она хорошо работает для UTF-16LE/CR-LF (протестированный в начале файла и конца файла. UTF-16 был форматом, который получил меня на эту тему и на самом деле был mimplest для работы с..
UTF-8 будет немного более хитрым. поскольку будет требоваться некоторый файловый ввод-вывод...
Вот сценарий.
(defun poff-zap ()
"Get the byte offset of point - A prototye, tested minimally only with UTF-16LE"
(interactive)
(let ((linect (- (line-number-at-pos) 1)) ;; line count to point
(choncl (- (point) (point-at-bol))) ;; characters to point on current line
(chrpnl 0) ;; chars per newline
(bytpch 0) ;; bytes per char
(bytpnl 0) ;; bytes per newline
(offset 0) ;; the byte offset
(coding (car (split-string (symbol-name buffer-file-coding-system) "-")))
(format (cadr (split-string (symbol-name buffer-file-coding-system) "-"))))
(case (coding-system-eol-type buffer-file-coding-system)
('0 (setq chrpnl 1)) ;; unix
('1 (setq chrpnl 2)) ;; dos
('2 (setq chrpnl 1)) ;; mac
(t))
(if (> chrpnl 0)
(cond
((string= "utf" coding)
(cond
((string= "8" format)
(progn
(setq bytpch -1)
;; need to do an actual byte count
;; using a UTF-8 parser
;; ...plus a BOM check(?)
))
((or
(string= "16" format)
(string= "16le" format))
(progn
(setq bytpch 2)
(if (= 2 chrpnl) (setq offset linect))
(setq offset (+ offset (point)))
(setq offset (* offset bytpch))
))
(t)))
(t)))
(message (concat
"poff-zap: " (number-to-string bytpch) " bytes-per-char\n"
" " (number-to-string chrpnl) " chars-per-newliner\n"
" " (number-to-string bytpnl) " bytes-per-newliner\n"
" " (number-to-string (point)) " point-emacs\n"
" " (number-to-string offset) " offset poff-zap\n"
" " (symbol-name buffer-file-coding-system) ))
))
(global-set-key (kbd "C-#") 'poff-zap)
(position-bytes (point))
.
– Gilles 'SO- stop being evil'
02.06.2012, 03:19
(insert #x1D11E)
в некотором utf-16 файле для вставки символа "G CLEF", и Вы будете видеть, что требуется четыре байта. Нижняя строка - то, что для надлежащего ответа необходимо смочь отобразить содержание (декодируемого) буфера к необработанному содержанию файла на диске, и я не думаю, что Emacs сохраняет это после того, как текст декодировался. Если Вы знаете, что только необходимо иметь дело с 2-byte/char затем, это hackable, но не, что Вы попросили...
– Eli Barzilay
02.06.2012, 07:16
Surrogate Pairs
хорошо, поскольку каждую пару рассматривает emacs как отдельный символ (как это должно сделать). Это действительно однако работает с BMP (Основная Многоязычная Плоскость) включая U+200B ZERO WIDTH SPACE
... таким образом кажется, что UTF-16 является тем, которому нужен парсинг, но я задержу выполнение этого, пока я не встречусь со своим первым Astral Plane
персонажи..
– Peter.O
02.06.2012, 08:36
hexl-mode
или hexview
вместо этого, когда файл содержит суррогатные пары (или, моя нейтрализация нейтрализации.. используйте WinHex в wine
, который имеет текст WYSIWIG seach, т.е. никакую потребность особенно обработать \x00 символы для текста ASCII. Работы WinHex, но я очень предпочел бы использовать *, отклоняют инструмент).
– Peter.O
02.06.2012, 08:54
Похоже, вы хотите position-bytes
. Вы можете увидеть байтовое смещение курсора («точка» в терминологии Emacs):
M-: (1- (position-bytes (point)))
Обратите внимание, что position-bytes
имеет индекс 1 -, поэтому 1-
. Вы можете обернуть это в удобную команду:
(defun wh/byte-offset-at-point ()
"Report the byte offset (0-indexed) in the file
corresponding to the position of point."
(interactive)
(message "byte offset: %d" (1- (position-bytes (point)))))
В vim
g^G
в нижней части экрана отображается что-то вроде:
Col 1 of 3; Line 2 of 2; Word 2 of 2; Char 5 of 8; Byte 7 of 10
Чтобы байтовое смещение курсора всегда отображалось в строке состояния, добавьте %o
к опции statusline
:
:set statusline+=\ %o
(вам может понадобиться ввести :set laststatus=2
, чтобы строка состояния всегда была видна, даже если экран не разделен. Чтобы смещение отображалось в правильном размере, поместите %o
справа от %=
вstatusline
).
См. также :go 123
или 123go
, чтобы расположить курсор ближе всего к 123 rd байту.
hexview
вместо этого (для просмотра), поскольку это не нарушает буфер отмены какhexl
делает (потому что это редактирует, я принимаю)..спасибо за помощь.. – Peter.O 02.06.2012, 01:00