Как удалить русский язык, и арабский язык представляет в виде строки от текстового файла

Я провел некоторое исследование, и найдите, что это не слишком твердо.

Для открытия текущего выбранного файла в рейнджере в новой области (направо) специальным способом можно сначала перейти к командной строке рейнджера (путем нажатия :) и затем ввести shell tmux splitw -h 'vim %f' следующее <Enter> ключ.

Для достижения этого с некоторой привязкой клавиш можно установить его в конфигурационном файле рейнджера. Для рейнджера 1.6 +, привязки клавиш указаны в rc.conf. Таким образом в ~/.config/ranger/rc.conf, используйте что-то вроде этого:

map ef eval if 'TMUX' in os.environ.keys(): fm.execute_console("shell tmux splitw -h 'vim " + fm.thisfile.basename + "'")

В то время как с рейнджером 1.4 Вам нужен файл ~/.config/ranger/keys.py со следующим содержанием:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Customized key bindings.

from ranger.api.keys import *

map = keymanager.get_context('browser')
@map("ef")
def edit_file_in_new_tmux_pane(arg):
    command = "shell tmux splitw -h 'vim " + arg.fm.env.cf.basename + "'"
    if 'TMUX' in os.environ.keys(): arg.fm.execute_console(command)

С вышеупомянутой установкой, когда Вы нажимаете ef в браузере рейнджера это откроет новую область tmux с энергией, редактируя выбранный файл.

Код просто для демонстрации, и это, возможно, должно было бы связать с большим количеством охраны, такой как проверка тип файла, и т.д.

Кредит переходит к руководству справки рейнджера и $(pythonpkginstalldir)/ranger/defaults/rc.conf ($(pythonpkginstalldir)/ranger/defaults/keys.py для рейнджера 1.4). Они действительно полезны.

3
22.10.2014, 18:23
1 ответ

Это должно работать, по крайней мере, для Вашего примера:

$ perl -CS -Mutf8 -lne 's{ 
            (?= [\p{Arabic}\p{Cyrillic}] ) 
            [\p{Arabic}\p{Cyrillic}\p{Common}\p{Inherited}] + 
            (?<= [\p{Arabic}\p{Cyrillic}] ) }{}xg || print' < file

kedi
cat
candy
şeker
çağrı
resumé

Основная идея заключается в том, чтобы использовать \p для определения набора кодовых точек, в данном случае арабской или кириллической, и если строка совпадает, то она не будет выведена на печать. К сожалению, я сам не понимаю подробностей, это было предоставлено @tchrist в чате. Предлагаю прочитать его описание там. Сейчас у меня нет времени расшифровывать регекс, но я добавлю объяснение, как только у меня появится возможность самому его понять. Учитывая источник, я предполагаю, что он более полный и безопасный, чем моя минималистская версия, приведенная ниже.


Упрощенная версия, которая попадает в мое собственное понимание, это

$ perl  -CS -ne '/[\p{Arabic}\p{Cyrillic}]+/ || print' < file 

Напечатает все строки, которые не содержат никаких арабских или кириллических символов только . В -CS сказано perl, что STDIN, STDOUT и STDERR являются уникодом. Сигнал -ne означает "считать каждую входную строку и применить скрипт, заданный -e". Символ /foo/ || bar означает do bar, если строка не совпадает с foo. В этом случае выведите, если строка не совпадает ни с арабскими, ни с кириллическими символами.

Наконец, \p{} is (from man perluniprops):

   The Perl regular expression "\p{}" and "\P{}" constructs give access to
   most of the Unicode character properties. 

Это позволяет вам сопоставить ряд символов, таких как арабский или кириллический, или практически все, что вы можете придумать. Поэтому класс символов [\p{foo}] будет соответствовать любому символу скрипта foo. Таким образом, [\p{Arabic}\p{Cyrillic}] будут соответствовать любым символам двух сценариев.

2
27.01.2020, 21:27

Теги

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