日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

使用lisp函数控制cursor

發布時間:2023/12/3 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 使用lisp函数控制cursor 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Getting Cursor Position

;; current cursor position (point) ;; returns the position of the beginning/end of region (region-beginning)
(region-end) ;; returns the position for the end of buffer ;; (taking account of narrow-to-region) (point-max) ;; beginning of buffer has point of 1. ;; Use (point-min) to get beginning position of buffer when narrow-to-region is in effect (point-min)

(info "(elisp) Positions")

Moving Cursor and Searching

;; move cursor to position 392 (goto-char 392) ;; move cursor by n chars (forward-char n)
(backward-char n) ;; move cursor to the first char that's not a newline or tab ;; Returns the distance traveled (skip-chars-forward "\n\t")
(skip-chars-backward "\n\t") ;; move cursor to the location of myStr ;; returns the new position (search-forward myStr)
(search-backward myStr) ;; move cursor to the location matched by a regex ;; returns the new position (search-forward-regex myRegex)
(search-backward-regex myRegex) ;; move to beginning/end of line (beginning-of-line)
(end-of-line)

(info "(elisp) Motion")

Text Editing

The following functions all have the Current Buffer as target.

Inserting Text

;; insert string at current cursor position (insert "i ♥ u") ;; insert part of a buffer (insert-buffer-substring-no-properties myBuffer myStartPos myEndPos) ;; insert a file's content (insert-file-contents myPath)

(info "(elisp) Text")

Deleting Text

;; delete 9 chars starting at current cursor pos (delete-char 9) ;; deleting text (delete-region myStartPos myEndPos) ;; delete whole buffer content (erase-buffer)

Find/Replace Text in Buffer

A typical idiom is to use?search-forward?or “search-forward-regex”, then use?replace-match. Use?while?if you want to do more than one replacement. Example:

;; idiom for string replacement in whole buffer  (let ((case-fold-search t)) ; or nil  (goto-char (point-min))(while (search-forward "myStr" nil t)(replace-match "myReplaceStr" t t))
) ;; for regex, use search-forward-regex

To control the letter case of search, set “case-fold-search” to?t?or?nil?with?let, as in the above. To control letter case of the replacement, use the optional arguments in your?replace-match?function.

;; the second captured string (match-string 2) ;; get the positions of the 2nd captured string (match-beginning 2) (match-end 2)

Grabbing Text

Functions that grab text in a buffer into a string.

;; get the string from buffer (setq myStr (buffer-substring myStartPos myEndPos))
(setq myStr (buffer-substring-no-properties myStartPos myEndPos))

;; grab a thing at point. The “thing” is a semantic unit. It can be a ; word, symbol, line, sentence, filename, URL and others.  ;; grab the current word (setq myStr (thing-at-point 'word)) ;; grab the current word with hyphens or underscore (setq myStr (thing-at-point 'symbol)) ;; grab the current line (setq myStr (thing-at-point 'line)) ;; grab the start and end positions of a word (setq myBoundaries (bounds-of-thing-at-point 'word))

For more about?thing-at-point, see:?Emacs Lisp: Using thing-at-point.

(info "(elisp) Buffer Contents")

Strings

Functions that takes a string argument.

;; length (length "abc") ; returns 3  ;; Extract a substring (substring myStr myStartPos myEndPos) ;; join strings (concat "some" "thing") ;; check if a string matches a pattern (string-match myRegex myStr) ;; get captured match ;; second argument is optional, but required if the last match is done by “string-match” (match-string 1 myStr) ;; change a given string using regex. Returns changed string. (replace-regexp-in-string myRegex myReplacement myStr) ;; split a string into parts, returns a list (split-string "ry_007_cardioid" "_")(string-to-number "3") ; change datatype (number-to-string 3) ; convert to string (format "%d" 3) ; similar to number-to-string but with fine control

Emacs has only very few functions that takes a string as argument. Any non-trivial string processing is done with a buffer. Use?with-temp-buffer, then insert your string, process it, then use?buffer-string?to get the whole buffer content.

(info "(elisp) Strings and Characters")

Preserving point, mark, buffer, narrow-to-region

When your command moves cursor to do some work, you usually want to preserve the cursor position before the command starts, so that when user calls your code, the cursor won't end up somewhere unexpected.

;; preserve {point, mark, current buffer} (save-excursion ;; lisp code here involving moving cursor, mark, changing buffer. ) ;; preserve user's narrow-to-region ;; useful when you want to narrow-to-region in your code to work in just that region (save-restriction (narrow-to-region START END) ;; lisp code here )

Buffers

Functions that acts on the buffer data type. Most buffer function assume the current buffer if no argument is given. Some requires a argument. The argument can usually be a buffer's name, or a buffer object.

;; return the name of current buffer (buffer-name) ;; return the full path of the file (buffer-file-name) ;; switch to a given buffer (set-buffer myBuffer) ;; close a given buffer (kill-buffer myBuffer) ;; use a temp buffer to manipulate string (with-temp-buffer (insert myStr) ;; manipulate the string here  (buffer-string) ; get result )

(info "(elisp) Buffers")

Files

Open, Append, Write

;; open a file (returns a buffer) (find-file myPath) ;; save current buffer (write to the associated file) (save-buffer) ;; same as “Save As”. Close current buffer and open the new saved (write-file myPath) ;; append a text block to file (append-to-file myStartPos myEndPos myPath) ;; close a buffer (kill-buffer myBuffName)

(info "(elisp) Files")

Rename, Copy, Delete

(rename-file fileName newName)(copy-file oldName newName)(delete-file fileName)(copy-directory dirPath newDirPath) ;; delete a whole dir. (new in emacs 23) (delete-directory dirPath t)

File Name Manipulation

;; get dir path (file-name-directory myFullPath) ;; get filename part (file-name-nondirectory myFullPath) ;; get filename's suffix (file-name-extension myFileName) ;; get filename sans suffix (file-name-sans-extension myFileName) ;; get relative path (file-relative-name myFilePath dirPath) ;; get full path (expand-file-name myFilePath)

  • Emacs Lisp Basics by Example
  • Programing: Overview of Text-Processing in Emacs Lisp
  • Simple Elisp Examples!
  • Emacs Lisp Idioms for Writing Interactive Commands
  • Emacs Lisp Function Frequency

轉載于:https://my.oschina.net/u/575122/blog/165057

總結

以上是生活随笔為你收集整理的使用lisp函数控制cursor的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。