Как я делаю “^\” символ в MATLAB?

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

, По-моему, СЛИЗЬ о единственной причине переключиться на emacs, если Вы являетесь уже опытными с vi.

6
задан gnovice 25 November 2009 в 03:59
поделиться

6 ответов

Создайте ярлык на панели инструментов, дайте ему name и поместите в обратный вызов следующее:

clipboard('copy','^')

Выполнение этого приведет к помещению символа экспоненты ^ в буфер обмена. Как только вы нажмете на нее, сделайте Ctrl + V , чтобы вставить ее.

Вы можете применить эту идею для создания библиотеки клипов фрагментов, доступной из меню «Пуск» MATLAB.

11
ответ дан 8 December 2019 в 02:41
поделиться

Какая у вас клавиатура, на которой ее нет?

http://msdn.microsoft.com/en-us/goglobal/bb964651.aspx

Мы быстро после просмотра этого вопроса проверьте, и не смогли найти клавиатуру без символа.

Поговорили об этом с нашей командой MATLAB I18N и отправили запрос на улучшение.

3
ответ дан 8 December 2019 в 02:41
поделиться

Вы можете просто использовать следующее математическое выражение:

a^b ≡ exp(b*ln(a))

Я как раз собирался предложить POWER (A, B) Функция заменяет функциональность оператора ^ , но gnovice меня опередил. Я предполагаю, что это то, на чем основаны функции POWER (A, B) и MPOWER (A, B) .

Как вы можете видеть из опубликованных ответов, там есть много альтернатив. Это дело вкуса, функциональности и повторения.

1
ответ дан 8 December 2019 в 02:41
поделиться

I would suggest downloading the submission EditorMacro from Yair Altman on the MathWorks File Exchange. If you ran the following code in the MATLAB Command Window (while the MATLAB Editor was open):

EditorMacro('Alt 6','^');

it would create a macro within the context of the MATLAB Editor and Command Window that would insert the string ^ at the caret position when you hit the key combination Alt+6 (which shouldn't be tied to any other macro/operation as far as I know).

Since you mention switching back and forth between a Croatian and English keyboard layout, it is probably annoying having to memorize different key combinations for the same symbols. Using EditorMacro, you could create a set of macros in the MATLAB Editor and Command Window that would allow you to use the same set of key presses for each symbol regardless of the type of keyboard you were using.

Since the macros made with EditorMacro are removed each time MATLAB is closed, you could create a startup.m file (which will be automatically run each time MATLAB is opened) to create the macros for you. The file could look something like this:

edit;                      %# Open the Editor so EditorMacro works properly
EditorMacro('Alt 5','%');  %# Create "%" macro
EditorMacro('Alt 6','^');  %# Create "^" macro
EditorMacro('Alt 7','&');  %# Create "&" macro
...

In this example, I am basically reproducing the behavior of Shift plus a number on an English keyboard using Alt instead.


And if all else fails...

You can always use the functional forms of the arithmetic operators as a last resort:

  • power(A,B) instead of the element-wise power operation A.^B
  • mpower(A,B) instead of the matrix power operation A^B

It won't be pretty, but it'll work.

6
ответ дан 8 December 2019 в 02:41
поделиться

В Windows (с включенным Num Lock) нажмите и удерживайте Alt , введите 9 4 на цифровой клавиатуре и отпустите ] Alt . ^ будет вставлен в курсор.

Это общий метод вставки произвольных символов Unicode в Windows, независимо от того, находятся ли они на клавиатуре.

^ - это U + 5E , то есть 94 в десятичной системе.

11
ответ дан 8 December 2019 в 02:41
поделиться

Хорошо ... Вот хак, который позволяет вы можете переназначить произвольные нажатия клавиш в командном окне и редакторе Matlab. Это неподдерживаемый способ взлома, который затрагивает недокументированные внутренние компоненты IDE. Но это «волшебство», как вы и надеялись. У меня работает в R2008b и R2009b.

Во-первых, определите класс Java, который может обрабатывать события, заменяя их вводом других нажатий клавиш. Скомпилируйте это в JAR и поместите в javaclasspath вашего Matlab.

package test;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.text.JTextComponent;
import javax.swing.text.TextAction;

/**
 * An action that responds to an event with another keystroke.
 */
public class KeyReplacementAction extends TextAction {

    private final char replacement;

    /**
     * @param name Name of this action (ignored in practice)
     * @param replacement char to replace the event with
     */
    public KeyReplacementAction(String name, char replacement) {
        super(name);
        this.replacement = replacement;
    }

    public void actionPerformed(ActionEvent e) {
        if (!(e.getSource() instanceof JTextComponent)) {
            return;
        }
        JTextComponent src = (JTextComponent) e.getSource();
        KeyEvent replacementEvent = new KeyEvent(src, KeyEvent.KEY_TYPED, 
                java.lang.System.currentTimeMillis(), 0,
                KeyEvent.VK_UNDEFINED, replacement);
        src.dispatchEvent(replacementEvent);
    }

}

Теперь используйте код Matlab, чтобы покопаться в виджетах Swing среды IDE, найти раскладки клавиш для редактора и командного окна и добавить обработчики для переназначения к ним.

function remap_keys_in_text_areas()
%REMAP_KEYS_IN_TEXT_AREAS Custom key remapping in Matlab GUI text areas
%
% Must be called after the editor is open, otherwise it won't find the
% editor keymap.

% { from, to; ... }
% Try "disp(char(1:1024))" to see all chars that work in your Matlab font
map = {
    '$' '^'
    '#' char(181)  % might be useful for text formatting
    };

make_sure_editor_is_open(); % otherwise we won't find its keymap

keymaps = find_ide_keymaps();
for i = 1:size(map,1)
    [from,to] = map{i,:};
    disp(sprintf('Re-binding %s to %s in text areas', from, to));
    for j = 1:numel(keymaps)
        bind_keystroke_for(keymaps{j}, from, to);
    end
end

function make_sure_editor_is_open()
s = find_editor_widgets();
if isempty(s.editors)
    edit;
end

function bind_keystroke_for(keymap, from, to)
%BIND_KEYSTROKE_FOR Remap a single keystroke in a text component

import javax.swing.KeyStroke;
import java.awt.event.InputEvent;
import test.KeyReplacementAction;

key = javax.swing.KeyStroke.getKeyStroke(from);
action = KeyReplacementAction(['remap ' from ' to ' to], to);
keymap.addActionForKeyStroke(key, action);

function out = find_ide_keymaps
%FIND_IDE_KEYMAPS Find keymap objects for Matlab IDE widgets
set = java.util.HashSet();
s = find_editor_widgets();
widgets = [s.cmdwin s.editors];
for i = 1:numel(widgets)
    set.add(widgets{i}.getKeymap());
end
set = set.toArray();
out = cell(size(set));
for i = 1:numel(set)
    out{i} = set(i);
end

function out = find_editor_widgets
%FIND_EDITOR_WIDGETS Find editor and command window widgets in Matlab Swing GUI
out.cmdwin = [];
out.editors = {};
wins = java.awt.Window.getOwnerlessWindows();
for i = 1:numel(wins)
    if isa(wins(i), 'com.mathworks.mde.desk.MLMainFrame')
        out.cmdwin = get_command_window_from_mainframe(wins(i));
    elseif isa(wins(i), 'com.mathworks.mde.desk.MLMultipleClientFrame')
        out.editors = [out.editors get_text_areas_from_editor_frame(wins(i))];
    end
end

function out = get_command_window_from_mainframe(frame)
out = findobj_swing_widget(frame, 'com.mathworks.mde.cmdwin.XCmdWndView');

function out = get_text_areas_from_editor_frame(frame)
out = findobj_swing_widget(frame, 'com.mathworks.widgets.SyntaxTextPane');

function out = findobj_swing_widget(widget, klass)
%FINDOBJ_SWING_WIDGET Recursively find all child components of given class
out = {};
if isa(widget, klass)
    out{end+1} = widget;
end
for i = 1:widget.getComponentCount()
    out = [out findobj_swing_widget(widget.getComponent(i-1), klass)];
end

] Для активации переназначения просто вызовите функцию. Вы можете сделать это из startup.m, чтобы это произошло автоматически.

>> remap_keys_in_text_areas
Re-binding $ to ^ in text areas
Re-binding # to µ in text areas
2
ответ дан 8 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

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