2016年9月20日 星期二

SublimeText快捷鍵

SublimeText快捷鍵

把有想到的常用的都打上來了,其實還有更多
可以google四處看看大家的快捷鍵介紹

按鍵簡寫注意看大小寫
CTRL   => C
Shift  => S
Alt    => A
  1. 快速複製
    C+S+d
  2. 行、區塊交換
    選取後 C+S+方向
  3. 選取重複單詞
    游標移至單詞 → C+D
    選取單詞 → C+D (匹配對單詞不敏感)
    C+K跳過這個匹配
  4. 模糊匹配
    單字打錯也能搜到
  5. 快速選取
    雙擊 單字選取
    三擊 行選取
  6. 括號選取
    C+S+空白
  7. Tab補字、選區塊
    比如說 for 迴圈快速移動到正確位置
  8. 快速刪除
    C+刪除 單詞單除
    C+S+刪除 砍到底
    S+delete C+x 剪下行
    C+c 複製該游標行
  9. 快速移動到括號
    C+m (可搭配S選取括號內容)
  10. 行、區塊註解
    選取後 C+/
  11. 單行、區塊快速縮排
    選取 → C+[ or Tab
    選取 → C+] or S+Tab
    Win10 中文輸入法不支持前者(快速鍵相衝)
    後者不支持單行,僅支持區塊
  12. 垂直選取
    C+A+↑↓
  13. 視覺模式
    中鍵拖曳選取
  14. 自動補字的位置快速匹配
    比如for先打出for按下tab自動補字
    此時在按一次tab自動定位到下一個位置

2016年9月17日 星期六

CMD 命令行中有哪些環境變量(系統變數) 可以查看、修改、刪除

CMD 命令行中有哪些環境變量(系統變數) 可以查看、修改、刪除

平時寫批次檔或是製作安裝檔的時候常常用到,就把它整理了一下
有一些比較刁鑽的部分有特別找出對應的代號
比如說 C:\Program FilesC:\Program Files (x86) 這兩個
對應的系統變數 %% ,網路很容易查找到的都是 C:\Program Files (x86)
還有一個我覺得很好用的是 %~dp0 主要用來執行批次檔
藉此取得安裝路徑,追蹤使用者,把軟體安裝到哪兒了
修改系統變數可以參考站內文章:如何利用 [CMD 批次檔 .bat] 設定環境變數 永久與暫時

常用

應用程式

%ProgramW6432% 應用程式目錄,預設是C:\Program Files
%ProgramFiles(x86)% 應用程式目錄,預設是C:\Program Files (x86)

使用者

%USERPROFILE% 目前使用者的設定檔路徑
%APPDATA% 目前使用者的Application Data資料夾位置
%HomeDrive% 使用者目錄的磁碟機
%HOMESHARE% 目前使用者共用資料夾的網路路徑
%ALLUSERSPROFILE% All Users設定檔的資料夾位置

系統

%SystemDrive% 系統磁碟機,預設是C
%WinDir% Windows目錄,預設是C:\WINNT或C:\WINDOWS
%SystemRoot% 系統根目錄,預設是C:\WINNT或C:\WINDOWS
%SystemDirectory% 系統目錄,預設是C:\WINNT\System32或C:\WINDOWS\System32

相對路徑

%~dp0 批次檔所在路徑,例如 C:\Program Files\Mozilla Firefox\ 或 UNC 路徑,例如 \Server\Share\Program Files\Mozilla Firefox\
%~d0 批次檔所在磁碟代號,例如 C: 或 UNC 路徑的雙反斜線 \
%~p0 批次檔所在路徑,不含磁碟代號,例如 \Program Files\Mozilla Firefox\ 或開頭不帶雙反斜線的 UNC 路徑,例如 Server\Share\Program Files\Mozilla Firefox\
%cd% 目前工作路徑,非根路徑時後面不帶反斜線例如 C:\Program Files\Mozilla Firefox

目錄

%Path% 執行檔的搜尋路徑
%CD% 目前的工作資料夾
%Temp%、%Tmp% 暫存檔目錄

名稱

%UserName% 使用者帳號名稱
%HomePath% 使用者家目錄
%CMDCMDLINE% 處理目前命令提示字元視窗命令的cmd.exe的完整路徑
%COMPUTERNAME% 電腦名稱
%UserDomain% 包含使用者帳號的網域名稱,或者電腦名稱

其他

%TIME% 目前的系統時間
%RANDOM% 顯示0到32767之間的十進位整數亂數
%OS% 作業系統名稱,其值固定為Windows_NT
%CLIENTNAME% 目前使用者的NETBIOS電腦名稱
%CMDEXTVERSION% 目前Command Processor Extensions的版本
%CommonProgramFiles% Common Files資料夾的路徑
%COMSPEC% 命令提示字元視窗的解譯程式路徑,通常與%CMDCMDLINE%相同
%ERRORLEVEL% 最近執行過的命令的錯誤碼;非零的值表示發生過的錯誤碼
%LOGONSEVER% 目前使用者所登入的網路控制器名稱
%PATHEXT% 作業系統是為執行檔的副檔名
%PROCESSOR_ARCHITECTU RE% 處理器的架構名稱,例如x86
%PROCESSOR_IDENTFIER% 說明處理器的文字(不一定會有此環境變數)
%PROCESSOR_LEVEL% 處理器的model number
%PROCESSOR_REVISION% 處理器的revision number
%PROMPT% 目前解譯程式的命令提示字串
%SESSIONNAME% 連上終端伺服器的session names
%NUMBER_OF_PROCESSORS% 電腦的處理器數量

2016年9月10日 星期六

如何救回被格式化的檔案 或 回收桶刪除的檔案 或 刪除分割表

如何救回被格式化的檔案 或 回收桶刪除的檔案

軟體:diskgenius

條件

複寫

首先檔案不能被複寫,比如說你把D曹格式化
之後又在D曹放了一些東西進去,那麼勢必有些檔案會損毀了
條件外的話就看運氣了…

格式化

檔案可以留著,不過可能需要人工辨別
檔案可能會混著已經被刪除的檔案

格式化後救援

接著慢慢掃描吧,可以邊掃描邊恢復,
只要沒有複寫過,可以保證檔案的完整性

分割區刪除

要是不小心砍錯分割區,這還好解決
可以保證直接復原到一開始的狀態,條件一樣是不能複寫(重分割)

關閉 Windwos 10 Defender 掃描 即時防護 [一鍵執行關閉]

關閉 Windwos 10 Defrender 掃描

這功能有些人用不到可能會覺得很多餘,偏偏又無法直接關閉

懶人包

執行即可,沒有多餘的操作

手動

2016年9月8日 星期四

河內塔 非遞迴解

河內塔 簡易的 非遞迴解

有別於普通利用數學找出規律的方式
僅僅只有3個流程1個口訣,即可解出來
  1. [組牌]
  2. [發牌]
  3. [收牌或換牌]
  • 不可重複上一步
有實驗過花幾分鐘記住口訣或看懂口訣,即便完全沒接觸的人
也能夠輕易解出多層的河內塔,當初實驗的人還蠻驚訝的XDD
代碼有些亂,有打算打掉重來全部套C++來寫
核心流程:
/**********************************************************
Name : KUAS-Hw/Hw08
DATE : 2016/04/06
Final: 2016/06/15
By   : CharlotteHong
**********************************************************/
//=========================================================
#include <iostream>
#include <stdio.h>
#include "fun\hanoi.h"
#include "fun\doulink.h"
using namespace std;
//=========================================================
int main(int argc, char const *argv[]){
    /* 開頭節點 */
    node** ht = new node*[3];
    ht[0] = node_creat(-1);
    ht[1] = node_creat(-1);
    ht[2] = node_creat(-1);
    /* 批次匯入節點 */
    int len = 8; //幾個盤子
    int *data = new int[len];
    for (int i = 0; i < len; ++i)
        data[i] = len-i;
    nodep_input(ht[0], data, len);
    //=====================================================
    // 計算最短步數
    int setup=2;
    for (int i = 0; i < len-1; ++i){
        setup*=2;
    }setup--;
    //=====================================================
    // 開始運行
    for (int i = 0; i < 1; ++i){
        cout << "-------------------[" << i << "]" << "" << endl;
        cout << "上一步: ";hanoi_logpri(ht);
        /* 1.組牌 */
        if (hanoi_handdif(ht)==1){
            if (hanoi_defrag(ht) == 0){
                cout << "  def" << endl;
                continue;
            }
        }
        /* 2.發牌 */
        if (hanoi_checksent(ht)==1){
            if (hanoi_sent(ht) == 0){
                cout << "  sen" << endl;
                continue;
            }
        }
        /* 3.收or換 */
        // 差 (雙)
        if (hanoi_handdif(ht) % 2 == 0){
            // 沒有重複上一步的話 => 小收回
            if (hanoi_receive(ht, 0) == 0){
                cout << "  sre" << endl;
                continue;
            }
            // 重複上一步的話 => 大收
            else{
                hanoi_receive(ht, 1);
                cout << "  bre" << endl;
                continue;
            }
        }
        // 差 (單)
        else{
            // 沒有重複上一步的話 => 小換
            if (hanoi_change(ht)==0){
                cout << "  chg" << endl;
                continue;
            }
            // 重複上一步的話 => 大收
            else{
                hanoi_receive(ht, 1);
                cout << "  bre" << endl;
                continue;
            }
        }
        cout << "Nothing" << endl;
    }
    cout << "-------------------[" << setup << "]" << "" << endl;
    cout << "上一步: ";hanoi_logpri(ht);
    //=====================================================
    /* 印出節點 */
    cout << "==============================================" <<endl;
    hanoi_pri(ht);
    //=====================================================
    /* 釋放記憶體 */
    for (int i = 2; i >= 0; --i){
        node_deleteall(ht[i]);
        delete [] ht[i];
    } delete [] ht;
    //=====================================================
    return 0;

}