Text Format

approved

by Benature

Format selected text upper/lower/capitalize.

β˜… 260 stars↓ 205,542 downloadsUpdated 1y agoMIT
View on GitHub

Text Format

Obsidian Downloads GitHub stars latest download Github release GitHub release (latest by date including pre-releases)

[ δΈ­ζ–‡ | English ]

When I'm taking notes, sometimes I encounter some issues like

  1. I copied some text from pdf or some other source, but the copied content is out of format. For example, there are more than one space between words or one paragraph brokes into several lines.
  2. Lowercase letters are required while they are all uppercase, etc.
  3. blahblahblah...

This plugin is created to format selected text lowercase/uppercase/capitalize/titlecase or remove redundant spaces/newline characters, and other features listed below.

Click to install this plugin right now

Features

Experimental features:

  • Format on paste: see #86

Commands

Press cmd/ctrl+P to enter the command. πŸ‘‡

Or you can consider to bind custom hotkeys to those commands according to #29.


βš™οΈ: There is setting of this command.

Basic

CommandDescription
LowercaseLowercase all letters in selection or the whole title (when cursor focus inline tile)
UppercaseUppercase all letters in selection or the whole title (when cursor focus inline tile)
Capitalize all words βš™οΈCapitalize all words in selection or the whole title (when cursor focus inline tile)
Capitalize only first word of sentence βš™οΈCapitalize only first word of sentence(s) in selection or the whole title (when cursor focus inline tile)
Title case βš™οΈCapitalize words but leave certain words in lower case in selection or the whole title (when cursor focus inline tile) #1
Cycle case βš™οΈA custom loop to format the selection or the whole title (when cursor focus inline tile)
Slugify selected textconvert any input text into a URL-friendly slug
Snakify selected textLowercase all letters in selection and replace spaces with underscores

Markdown Grammar

CommandDescription
Heading uppere.g.: # Heading -> ## Heading (default shortcut: Ctrl+Shift+])
Heading lowere.g.: ## Heading -> # Heading (default shortcut: Ctrl+Shift+[) [discussions]
Callout format#80
List
CommandDescription
Detect and format bullet list βš™οΈChange β€’ into bullet list, i.e. - ; split every bullet point into single line; and remove blank lines. (test cases)
Detect and format ordered listChange *)(star could be any letter) into ordered list (e.g. 1. , 2. ); split every ordered point into single line; and remove blank lines. (#4)
Convert table to bullet listThe first volume is 1st list, other volumes are sub-list
Convert table to bullet list with headerSub-list begins with ${header}:
Sort to-do list#37, #46
Links
CommandDescription
Remove WikiLinks format in selectione.g. Convert [[WikiLinks]] to WikiLinks (#28)
Remove URL links format in selectione.g. Convert [Google](www.google.com) to Google
Convert URL links to WikiLinks in selectione.g. Convert [Google](www.google.com) to [[Google]]
Convert WikiLinks to plain markdown links in selection βš™οΈe.g. Convert [[Google]] to [Google](Google.md) (#40)

Copy / OCR issues

CommandDescription
Remove redundant spaces in selectionEnsure only one space between words
Remove all spaces in selectionRemove all spaces
Remove trailing spaces in selectionRemove trailing spaces (#61)
Remove blank line(s)replace \n\n with \n
Merge broken paragraph(s) in selection βš™οΈChange selected lines into single-line, except lines are separated by blank line(s). At the same time, blank lines will be merged into one blank line(optional, default enable), and redundant spaces will be removed(optional, default enable).
Split line(s) by blanksReplace with \n for OCR use case.
Convert to Chinese punctuation marks (,;:!?) βš™οΈFor OCR use case. (For who require more custom setting, I would recommend https://p.gantrol.com/)
Convert to English punctuation marksSimilar to Convert to Chinese punctuation marks (,;:!?)
Remove hyphensRemove hyphens (like when pasting text from pdf) #15
Replace ligatureReplace ligature to Non-ligature #24

Academic / Study

CommandDescription
Convert selection into Anki card format#32
Remove citation indexe.g., A research [12] about notes => A research about notes
Get Zotero note from clipboard and paste βš™οΈSee below ⬇️
Detect and convert characters to math mode (LaTeX)e.g. convert P into $P$ (latex), apply for all single letter except a.
Convert Mathpix array to markdown tableConvert latex array generated by Mathpix to markdown table format

Advanced custom

CommandDescription
Custom Replace βš™οΈCustom replace <search> to <replace>. See below for more examples ⬇️
Custom Wrapper βš™οΈAdd any arbitrary wrapping element in Setting. (https://github.com/Benature/obsidian-underline/issues/5) See below for more examples ⬇️
Custom API Request βš™οΈReplace Selection with the return of custom API request. The selection will be sent to custom API URL with POST method. (No user data is collected!) There is an example of my use case.

Others

CommandDescription
Decode URLDecode URL for better reading and shorter url.
Add extra double spaces per paragraph for whole fileAdd double spaces at the end of every paragraph #8
Add extra line break to paragraphreplace \n with \n\n
Format space between word and symboladd space between words and (

Support

If you find this plugin useful and would like to support its development, you can sponsor me via Buy Me a Coffee β˜•οΈ, WeChat, Alipay or AiFaDian. Any amount is welcome, thank you!

Some Examples

Zotero format

The format template can refer to https://www.zotero.org/support/note_templates

  • default
    • zotero: <p>{{highlight quotes='true'}} {{citation}} {{comment}}</p>
    • plugin config: β€œ(?<text>.*)” \((?<item>.*?)\) \(\[pdf\]\((?<pdf_url>.*?)\)\)
    • result: {text} [πŸ”–]({pdf_url})

Replacements

use cases:

  • Split paragraph into sentences: #78

Wrapper

use cases:

  • Underline: prefix=<u>, suffix=</u>, then selected text will turn into <u>text</u>
  • Font color: #30

Convert citation index to the file name of paper note

With bib-cacher, I can connect to Zotero database by python, building a simple Flask server.

Example of command Custom API Request:

- A survey concludes that obsidian is a good app [12]. Furthermore, The note taking...
+ A survey concludes that obsidian is a good app ([[File Name of the Reference]]). Furthermore, The note taking...

Basic

demo

  • lowercase
    - Hello, I am using Obsidian.
    + hello, i am using obsidian.
    
  • uppercase
    - Hello, I am using Obsidian.
    + HELLO, I AM USING OBSIDIAN.
    
  • capitalize word
    - Hello, I am using Obsidian.
    + Hello, I Am Using Obsidian.
    
  • capitalize sentence
    - hello, I am using Obsidian.
    + Hello, I am using Obsidian.
      ^
    
  • title case
    - Obsidian is a good app.
    + Obsidian Is a Good App.
                  ^
    
  • slugify
    - Obsidian - a good app.
    + obsidian-a-good-app
    
  • snakify
    - Obsidian is a good app
    + obsidian_is_a_good_app
    
  • redundant spaces
    - There  are so   many redundant      blanks
    + There are so many redundant blanks
    
  • merge broken paragraph
    - This paragraph is broken 
    - into several lines. I want 
    - those lines merged!
    - 
    - And this is second paragraph. There is a blank line between 
    - two paragraph, indicating that they should not be merged into 
    - one paragraph!
    
    + This paragraph is broken into several lines. I want those lines merged!
    +
    + And this is second paragraph. There is a blank line between two paragraph, indicating that they should not be merged into one paragraph!
    
  • bullet list
    - β€’ first, blahblah β€’ second, blahblah β€’ third, blahblah
    
    + - first, blahblah 
    + - second, blahblah 
    + - third, blahblah
    
  • ordered list
    - a) first, blahblah b) second, blahblah c) third, blahblah
    - i) first, blahblah ii) second, blahblah iii) third, blahblah
    
    + 1. first, blahblah 
    + 2. second, blahblah 
    + 3. third, blahblah
    

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.